实验一 顺序表的插入和删除

实验一   顺序表的插入和删除
实验一   顺序表的插入和删除

实验一顺序表的插入和删除

1.实验目的:

了解顺序表的基本概念、结构的定义及在顺序表上的基本操作(插入、删除、查找以及线性表合并),通过在VC6或者VS平台实现以上操作更好的了解书本上的内容。

2.实验预备知识:

⑴ 复习C语言中数组的用法。

⑵ 了解线性表和顺序表的概念,顺序表的定义方法;

?线性表是n个数据元素的有限序列,至于每个数据元素的具体含义,在不同的情况下各不相同。

?顺序表是线性表的顺序存储表示,是用一组地址连续的存储单元依次存储线性表的数据元素。

?在C语言中,顺序表是用数组或指针来实现的。

⑶ 掌握线性表在顺序存储结构上实现基本操作:查找、插入、删除和合

并的算法。在实现这些算法的时候,要注意判断输入数据的合法性,

除此之外还要要注意以下内容:

?在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出错误提示)。

?在实现插入的时候,首先要判断该顺序表是否为满,如为满则须重新分配空间(此时要注意:若顺序表是用数组来实现的,它不

能随机分配空间);如不为满,则需判断要插入的位置是否合法

(例如:如果一个线性表的元素只有10个,而要在第0个元素

前插入或在第11个元素后插入就为不合法)。其次要注意是前插

还是后插,两者是有区别的;最后还要注意插入时各个数据元素

移动的次序是从后面依次开始移动。

?在实现删除的时候,首先要判断该顺序表是否为空,如为空则报错,如不为空,则需判断要删除的位置是否合法(例如:如果一

个线性表的元素只有10个,而要删除第0个或第十一个元素就

为不合法)。其次还要注意删除时各个数据元素移动的次序是从

前面依次开始移动。

3.实验内容:

1、输入一批整型数据,建立顺序表;

2、实现顺序表的插入(输入插入位置i,插入元素)

3、实现顺序表的删除(输入删除元素位置i)

4、实现顺序表中数据的显示;

5、实现顺序表中数据的查找和定位;

6、编写主函数,调试上述算法。

顺序表的创建插入与删除

#include #define maxsize 1024 //定义maxsize是1024 #define inplen 10 //定义inplen是10 typedefint datatype; typedefstruct { datatype data[maxsize]; int last; }sequenlist; //创建一个顺序表并且将之初始化 sequenlist *CreatInit(void) { sequenlist *l; l = new sequenlist( ); //使用动态分配sequenlist空间大小l->last=-1; //空表 return l; } //打印出顺序表 void println(sequenlist *head) { sequenlist *p = head; inti = 0; printf(" Now the squenlist is:"); for (i = 0; i<= p->last; i++) { printf("%d ", p->data[i]); } } //计算出顺序表的长度 int Length(sequenlist *head) { return head->last+1; } //给顺序表结点data[i]赋值 sequenlist *Setvalue(sequenlist *head) { inti; sequenlist *p = head; for (i = 0; idata[i]); //键盘上输入10 个结点的值} p->last = i-1;

顺序表的查找、插入与删除实验报告

《数据结构》实验报告一 学院:班级: 学号:姓名: 日期:程序名 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、源程序及注释: #include #include /*顺序表的定义:*/ #include #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; void main() { SeqList L; int i,x; int n=10; /*欲建立的顺序表长度*/ L.length=0; void CreateList(SeqList *L,int n); void PrintList(SeqList L,int n); int LocateList(SeqList L,DataType x); void InsertList(SeqList *L,DataType x,int i); void DeleteList(SeqList *L,int i);

实验一 顺序表操作实现

实验一顺序表操作实现 实验日期:2017 年 3 月 6 日 实验目的及要求 1. 熟练掌握线性表的基本操作在顺序存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的顺序存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数调用的参数传递、指针类型的应用)。实验内容 已知程序文件seqlist.cpp已给出学生身高信息顺序表的类型定义和基本运算函数定义。 (1)顺序表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; (2)基本运算函数原型 void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/

任务一 创建程序文件seqlist.cpp,其代码如下所示,理解顺序表类型Seqlist和基本运算函数后回答下列问题。 /*seqlist.cpp程序文件代码*/ #include #include #define MAX 50 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/ /*置一个空表*/ void initList(Seqlist *lp) { lp->last=0; } /*建一个学生顺序表*/ void createList(Seqlist *lp) { FILE *fp; int xh ,sex; float sg; if((fp=fopen("records.txt","r"))==NULL) { Error("can not open file !"); } while(!feof(fp)) { fscanf(fp,"%d%f%d",&xh,&sg,&sex); lp->data[lp->last].xh=xh; lp->data[lp->last].sg=sg; lp->data[lp->last].sex=sex; lp->last++; } fclose(fp);

数据结构-顺序表的查找插入与删除

一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、源程序及注释: #include #include /*顺序表的定义:*/ #include #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; void main() { SeqList L; int i,x; int n=10; /*欲建立的顺序表长度*/ L.length=0; void CreateList(SeqList *L,int n); void PrintList(SeqList L,int n); int LocateList(SeqList L,DataType x); void InsertList(SeqList *L,DataType x,int i); void DeleteList(SeqList *L,int i); CreateList(&L,n); /*建立顺序表*/ PrintList(L,n); /*打印顺序表*/ printf("输入要查找的值:"); scanf("%d",&x); i=LocateList(L,x); /*顺序表查找*/ printf("输入要插入的位置:"); scanf("%d",&i); printf("输入要插入的元素:"); scanf("%d",&x);

线性表的创建插入和删除的操作

实验容:线性表的创建、插入删除等 #include"stdio.h" #include"stdlib.h" int*inistl(int m,int *n) /*建立线性表函数*/ {int*v=NULL; v=malloc(m*sizeof(int*)); /*创建链表,并把首地址赋给指针V*/ n=0; return v; } void insl(int*v,int m,int*n,int i,int b)/*在链表指定位置插入元素b*/ { int j; if(*n>=m) /*检查是否链表溢出*/ {printf("the stack is overflow\n"); return; } if(i>*n-1) i=*n+1; /*若插入点大于元素位置则在表的结束插入*/ if(i<1) i=1; /*空表在首部插入元素*/ for(j=*n;j>=i;j--) /*首位之间任意位置的插入*/ v[j]=v[j-1]; v[i-1]=b; *n=*n+1; /*插入后元素统计指针加1*/ } void desl(int*v,int m,int*n,int i) /*线性表删除函数*/ {int j; if(*n==0) /*判断线性表是否为空*/ {printf("the stack is underflow\n "); return; } if((i<1)||(i>*n)) /*删除点在首部以前和尾部以后特殊情况排除*/ {printf("not this element in the list!"); return; } for (j=i;j<=*n-1;j++) /*在允许位置做删除操作*/ v[j-1]=v[j]; *n=*n-1; /*元素统计指针减1*/ return; }) void input(int*v,int n) /*空表起始输入元素函数*/ {int i; for(i=0;i

实验报告一顺序表的操作

《数据结构》实验报告一 系别:班级: 学号:姓名: 日期:指导教师: 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 从键盘输入10个整数,产生顺序表,并输入结点值。 从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。 从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 三、源程序及注释:

#include <> /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/ void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ =0;

实验一 数据结构顺序表的插入和删

实验一顺序表的操作 1.实验题目:顺序表的操作 2.实验目的和要求: 1)了解顺序表的基本概念、顺序表结构的定义及在顺序表上的基本操作(插入、删除、查找以及线性表合并)。 2)通过在Turbo C(WinTc,或visual stdio6)实现以上操作的C语言代码。 3)提前了解实验相关的知识(尤其是C语言)。 3.实验内容:(二选一) 1)顺序表的插入算法,删除算法,顺序表的合并算法 2)与线性表应用相关的实例(自己选择详尽实例) 4.部分参考实验代码: ⑴顺序表结构的定义: #include #define MAXLEN 255 typedef int ElemType; typedef struct { ElemType elem[MAXLEN]; int length; }sqList; ⑵顺序表前插(在第i号元素前插入一个新的元素) int ListInsert(sqList *la,int i,int x)

{ int j; if(i<0||i>la-> length +1) {printf(“\n the value of i is wrong!”); return 0; } if(la-> length +1>=MAXLEN) { printf(“\n overflow!”); return 0; } . for(j=la-> length;j>=i;j--) la->list[j+1]=la->list[j]; la->list[i]=x; la-> length++; return 1; } ⑶顺序表删除 int ListDelete(sqList *la,int i) { if(i<0||i>la-> length) { printf(“\n the position is wrong!\n”); return 0; }

数据结构-线性表输入-输出-插入-删除-查找

数据结构-线性表输入-输出-插入-删除-查找

创建一个线性表实现输入,输出,插入,删除,定位。 (注意:不论在调用哪个函数前,都要先使L.elem=a,就是使指针elem回到数组a的首地址。) #include #include #include #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; //接下来ElemType代表的就是int typedef int Status; //Status也代表int int i,*p,*q; //p,q都是指针类型 ElemType e; typedef struct { ElemType *elem; //定义成指针类型//存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) }SqList; //***********************构建空的线性表*************************// Status InitList_Sq(SqList &L) //构建一个空的线性表L { L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; //空表长度为0 L.listsize=LIST_INIT_SIZE; //初始存储容量 return OK; } //**************************线性表输入函数*********************// void input(SqList &L) //输入函数 { scanf("%d",L.elem); //要先输入一个,不然一开始就是0,无法进行循环while(*L.elem) // 加*是因为elem是指针,加之后才代表值{ L.elem++; //输入后指针后移 L.length++; //表长加1 scanf("%d",L.elem); //循环中也要再输入 } } //**************************线性表打印函数********************// void print(SqList &L) //输出函数

顺序表实验报告

《数据结构》实验报告一 系别:嵌入式系统工程系班级:嵌入式11003班 学号:11160400314 姓名:xxx 日期:2012年4月9日指导教师XX 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 创建一个顺序表,实现对顺序表的插入,查找,删除等功能。 三、源程序及注释: #include /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/

void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ L.length=0; /*调用创建线性表函数*/ printf(“create function:\n”); CreateList(&L,n); /*建立顺序表*/ PrintList(L,n); /*打印顺序表*/ /*调用查找函数*/ printf(“search function:\n”); printf("input the data you want to search:"); scanf("%d",&x); i=LocateList(L,x); /*顺序表查找*/ if (i==0) printf("sorry,don't find %d!\n\n",x); else printf("i have find the %d,it locate in %d!\n\n",x,i); /*调用插入函数*/ printf(“Insert function:\n”); printf("输入要插入的位置:(input the position:)"); scanf("%d",&i); printf("输入要插入的元素:(input the data:)"); scanf("%d",&x); InsertList(&L,x,i); /*顺序表插入 */ PrintList(L,n); /*打印顺序表 */ /*调用删除函数*/ printf(“delete function:\n”); printf("输入要删除的位置:(input the position:)"); scanf("%d",&i); DeleteList(&L,i); /*顺序表删除 */ PrintList(L,n); /*打印顺序表 */

线性表的插入与删除的实现

线性表的插入与删除的实现 一.算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。 2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。 3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。 4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求 三.数据结构的定义 1.数据的逻辑结构:反映数据元素之间的关系的数据元素集合的表示。数据的逻辑结构包括集合、线形结构、树形结构和图形结构四种。 2.数据的存储结构:数据的逻辑结构在计算机存储空间种的存放形式称为数据的存储结构。常用的存储结构有顺序、链接、索引等存储结构。 在数据结构中,没有前件的结点称为根结点;没有后件的结点成为终端结点。插入和删除是对数据结构的两种基本运算。还有查找、分类、合并、分解、复制和修改等。 五.线性结构和非线性结构 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构和非线性结构。 线性结构:非空数据结构满足:有且只有一个根结点;每个结点最多有一个前件,最多只有一个后件。非线性结构:如果一个数据结构不是线性结构,称之为非线性结构。 常见的线性结构:线性表、栈、队列 七.线性表的顺序存储结构 线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构具备如下两个基本特征: 1.线性表中的所有元素所占的存储空间是连续的; 2.线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 即线性表逻辑上相邻、物理也相邻,则已知第一个元素首地址和每个元素所占字节数,则可求出任一个元素首地址。 假设线性表的每个元素需占用K个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系: LOC(ai+1)=LOC(ai)+K LOC(ai)=LOC(a1)+(i-1)*K ① 其中,LOC(a1)是线性表的第一个数据元素a1的存储位置,通常称做线性表的起始位置或基地址。 因为在顺序存储结构中,每个数据元素地址可以通过公式①计算得到,所以线性表的顺序存储结构是随机存取的存储结构。 在线性表的顺序存储结构下,可以对线性表做以下运算: 插入、删除、查找、排序、分解、合并、复制、逆转

线性表的插入,删除,修改

#include"stdio.h" #include"stdlib.h" int*inistl(int m,int *n) /*建立线性表函数*/ {int*v=NULL; v=malloc(m*sizeof(int*)); /*创建链表,并把首地址赋给指针V*/ n=0; return v; } void insl(int*v,int m,int*n,int i,int b)/*在链表指定位置插入元素b*/ { int j; if(*n>=m) /*检查是否链表溢出*/ {printf("the stack is overflow\n"); return; } if(i>*n-1) i=*n+1; /*若插入点大于元素位置则在表的结束插入*/ if(i<1) i=1; /*空表在首部插入元素*/ for(j=*n;j>=i;j--) /*首位之间任意位置的插入*/ v[j]=v[j-1]; v[i-1]=b; *n=*n+1; /*插入后元素统计指针加1*/ } void desl(int*v,int m,int*n,int i) /*线性表删除函数*/ {int j; if(*n==0) /*判断线性表是否为空*/ {printf("the stack is underflow\n "); return; } if((i<1)||(i>*n)) /*删除点在首部以前和尾部以后特殊情况排除*/ {printf("not this element in the list!\n"); return; } for (j=i;j<=*n-1;j++) /*在允许位置做删除操作*/ v[j-1]=v[j]; *n=*n-1; /*元素统计指针减1*/ return; } void input(int*v,int n) /*空表起始输入元素函数*/ {int i; for(i=0;i

实验一顺序表与链表

实验一顺序表与链表 一、实验目的 1、掌握线性表中元素的前驱、后续的概念。 2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。 二、实验预习 说明以下概念 1、线性表: 2、顺序表: 3、链表: 三、实验容和要求 1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。 #include #include #define ERROR 0 #define OK 1 #define INIT_SIZE 5 /*初始分配的顺序表长度*/ #define INCREM 5 /*溢出时,顺序表长度的增量*/ typedef int ElemType; /*定义表元素的类型*/ typedef struct Sqlist{ ElemType *slist; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }Sqlist; int InitList_sq(Sqlist *L); /* 构造一个空的线性表L*/ int CreateList_sq(Sqlist *L,int n); /* 构造顺序表的长度为n */ int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入新的数据元素e,L的长度加1 */ int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/ int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/

实验一.顺序表验证实验

实验一顺序表操作验证 一、实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶掌握数据结构及算法的程序实现的基本方法。 二、实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 三、设计与编码 (a)本实验用到的理论知识 首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。 (b)算法设计 const int MaxSize=10; template //定义模板类SeqList class SeqList { public: SeqList( ){length=0;} //无参构造函数 SeqList(T a[ ], int n);//有参构造函数 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; 其次,建立含有n个数据元素的顺序表,即设计构造函数。算法如下:

最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。 ⑴插入算法 ⑵删除算法 ⑶查找算法 (c)编码 #include #include using namespace std;

实验1 顺序表的操作

实验1 顺序表的操作 一、实验要求 1 建立顺序表 2 顺序表的长度并输出顺序表 3 插入元素的位置和元素 4 删除值为x的元素 5 顺序表倒置 6 将顺序表按升序排序 7 将两个顺序有序表A和B合并为一个有序表C 二、源代码 DS.h #include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; SqList.h #ifndef SQLIST_H_INCLUDED #define SQLIST_H_INCLUDED #include "DS.h" typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; }SqList; void menu(); Status InitList_Sq(SqList &L, int n);/*初始化顺序表*/ Status CreateList_Sq(SqList &L);/*建立顺序表*/

void PrintList_Sq(SqList L);/*输出顺序表*/ Status DeleteList_Sq(SqList &L,int i,ElemType &e);/*删除第i个元素*/ Status DeleteListX_Sq(SqList &L,ElemType x);/*删除值为x的元素*/ Status AdjustList_Sq(SqList &L);/*奇数排在偶数之前*/ Status OrderList_sq(SqList &L, int n);/*插入法生成递增有序表*/ void MergeList_Sq(SqList La, SqList Lb, SqList &Lc );/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/ #endif // SQLIST_H_INCLUDED SqList.cpp #include "SqList.h" void menu() { printf("\t\t\t 顺序表基本操作\n\n"); printf("\t\t\t1.建立顺序表\n"); printf("\t\t\t2.遍历顺序表\n"); printf("\t\t\t3.删除第i 个元素\n"); printf("\t\t\t4.删除值为x 的元素\n"); printf("\t\t\t5.奇数排在偶数之前\n"); printf("\t\t\t6.插入法生成递增有序表\n"); printf("\t\t\t7.两个非递减有序表La和Lb合并成非递减有序表Lc\n"); printf("\t\t\t0.退出\n\n"); } /*初始化顺序表*/ Status InitList_Sq(SqList &L, int n) { L.elem=(ElemType*)malloc(n*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=n; return OK; } /*建立顺序表*/ Status CreateList_Sq(SqList &L) { int n, i; printf("请输入顺序表长度:"); scanf("%d", &n); if(InitList_Sq(L, n)) {

实验一数据结构顺序表的插入和删除

实验一顺序表的操作 1. 实验题目:顺序表的操作 2.实验目的和要求: 1)了解顺 序表的基本概念、顺序表结构的定义及在顺序表上的基本操作(插入、 删除、查找以及线性表合并 )。 2)通过在 Turbo C ( WinTc ,或 visual stdio6 )实现以上操作的 C 语言 代码。 3)提前了解实验相关的知识(尤其是 C 语 言)。 3.实验内容:(二选一) 1) 顺序表的插入算法, 删除算法, 顺序表的合并算法 2) 与线性表应用相关的实例( 自己选择具体实例) 4.部分参考实验代码: ⑴ 顺序表结构的定义: #include #define MAXLEN 255 typedef int ElemType; typedef struct { ElemType elem[MAXLEN]; int length; }sqList; ⑵ 顺序表前插(在第i 号元素前插入一个新的元素) int ListInsert(sqList *la,int i,int x) { int j; if(i<0||i>la-> length +1) { printf( “ n the value of i is wrong! ” ); return 0; } if(la-> length +1>=MAXLEN) { printf( “ n overflow! ” ); return 0; }

. for(j=la-> length;j>=i;j--) la->list[j+1]=la->list[j]; la->list[i]=x; la-> length ++; return 1; } ⑶ 顺序表删除 int ListDelete(sqList *la,int i) { if(i<0||i>la-> length ) { printf( “ return 0; n”); } for(i;i length;i++) la->list[i-1]=la->list[i]; la-> length --; return 1; } 5.附录:实验预备知识: ⑴ 复习 C 语言中数组的用法。 ⑵ 了解线性表和顺序表的概念,顺序表的定义方法; 线性表是n 个数据元素的有限序列,至于每个数据元素的具体含义,在不同的情况下各不相同。 顺序表是线性表的顺序存储表示,是用一组地址连续的存储单元依次存储线性表的数据元素。 在 C 语言中,顺序表是用数组来实现的。 ⑶ 掌握线性表在顺序存储结构上实现基本操作:查找、插入、删除和 合并的算法。 在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容: 在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出未查到提 示)。 在实现插入的时候,首先要判断该顺序表是否为满,如为满则报错 (此时要注意:顺序表是用数组来实现的,它不能随机分配空 间);如不为满,则需判断要插入的位置是否合法(例如:如果 一个线性表的元素只有10 个,而要在第0 个元素前插入或在第 11 个元素后插入就为不合法)。其次要注意是前插还是后插,两

线性表的插入和删除

实验一线性表的基本操作 一、实验目的 掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构上的运算。 二、实验要求 1、认真阅读和掌握本实验的程序。 2、上机运行本程序。 3、保存和打印出程序的运行结果,并结合程序进行分析。 4、按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单 和运行结果 三、实验内容 线性表基本操作的实现。 算法描述:对每一个算法,要写出算法的中文描述。本实验中要求写出在第i 个结点前插入数据为x的结点、删除指定结点、创建一个线性表、打印线性表的算法描述。 四、程序清单 1、sqlist.h文件清单: #include "stdio.h" #include "malloc.h" #define null 0 #define maxsize 1024 typedef char datatype; typedef struct { datatype data[maxsize]; int last; }sequenlist; /*在第i个结点前插入元素x(note:元素从0始计数)*/ int insert(sequenlist *L, datatype x,int i) { int j; if (L->last==maxsize-1)/*如果原线性表已经满了*/ { printf("overflow"); return 0; } else if ((i<0)||(i>L->last)) /*如果输入的i值超出范围*/ { printf("error,please input the right 'i'"); return 0; } else { for(j=L->last; j>=i; j--) /*从第i个元素起,每个元素后移一位*/ L->data[j+1]=L->data[j];

实验一顺序表

注意事项: 在磁盘上创建一个目录,专门用于存储数据结构实验的程序。因为机房机器有还原卡,请同学们将文件夹建立在最后一个盘中,以学号为文件夹名。 实验一顺序表操作 一、实验目的 1、掌握使用VC++上机调试线性表的基本方法; 2、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结 构上的运算。 二、实验要求 1.认真阅读和掌握本实验的程序。 2.上机运行本程序。 3. 将剩余的操作函数补齐,如删除,判空,有序表的合并,求并集等。 三、实验内容 例:程序1:顺序表基本操作的实现 这个程序中演示了顺序表的创建、插入和查找和合并。 程序如下: #include #include "stdio.h" #include #include #define MAXSIZE 100 typedef int DataType ; //先设定数据元素的类型为整形 //定义顺序表的结构类型 typedef struct { DataType data[MAXSIZE]; int length; } SeqList,* PSeqList; //初始化顺序表 PSeqList Init_SeqList( ){ PSeqList p; p=(PSeqList)malloc(sizeof(SeqList)); if (p) p->length=0; return p; } //销毁顺序表 void Destroy_SeqList(PSeqList *p){ if (*p) free(*p); *p=NULL; }

数据结构线性表单链表的查找,插入,删除

实验报告 课程名称数据结构 姓名 学号 专业班级 指导教师

目录 第二章线性表的查找、插入、删除 (1) 1.1顺序表的查找 (1) 1.2顺序表的插入 (2) 1.3顺序表的删除 (4) 单链表的建立、插入、删除 (6) 2.1 单链表的建立(尾插法) (6) 2.2 单链表的插入 (8) 2.3 单链表的删除 (10) 第三章栈 (14) 3.1链栈 (14) 3.2 顺序栈 (16) 3.3队列 (18) 3.4杨辉三角 (20) 第四章串 (23) 4.1字符串的建立 (23) 4.2顺序串的插入 (25)

1.线性表的查找、插入、删除 1.1顺序表的查找 程序: #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表为-1*/ }Seqlist; int Locate(Seqlist L,ElemType e) /*在顺序表L中查找与e相等的元素,若L。elem[i]=e,则找到该元素,并返回i+1,若找不到,则返回-1*/ { int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ while ((i<=https://www.360docs.net/doc/7711715346.html,st)&&(L.elem[i]!=e)) /*顺序扫描表,直到找到值为e的元素,或扫描到表尾仍没找到*/ i++; if(i<=https://www.360docs.net/doc/7711715346.html,st) return (i+1); /*若找到值为e的元素,则返回其序号*/ else return(-1); /*若没找到,则返回空序号*/ } void main() { Seqlist l; int p,q,r; int i; printf("请输入线性标的长度:"); scanf("%d",&r);

相关文档
最新文档