《线性表的插入和删除(数据结构)》由会员分享,可在线阅读,更多相关《线性表的插入和删除(数据结构)(10页珍藏版)》请在金锄头文库上搜索。
1、第 1 页 共 10 页电子信息工程学系实验报告 适用于计算机课程课程名称: 实验项目名称:线性表的插入和删除 实验时间: 2012、3、5 班级:计应 102 姓名: 学号: 实 验 目 的: 熟悉掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,并熟悉其各自的优缺点及适用性。实 验 环 境: CFree5.0实 验 内 容 及 过 程: 题目 1:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。(2) 键盘输入 10 个数据元素,利用顺序表的基本操作,建立该表。(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数
2、)。(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。要求尽可能少地修改前面的程序来得到新程序。(这里用于比较的字段为分数)题目 2:编写程序实现下列的要求:(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。(3) 键盘输入关键字值 x,打印出表中所有关键字值element=(datatype *)malloc(sizeof(datatype)*m);if(p-element!=NULL)p-m
3、axnum=m;p-n=0;return(p);第 3 页 共 10 页else free(p);printf(out of space);return NULL;Pseqlist init_seq(Pseqlist p,int n) /* 初始化空的顺序表,即填充数据,顺序表的实际元素个数 n 由参数提供*/int i;printf(input the element of seqlist:);for(i=0;ielementi);p-n=n;return(p);int insertpost_seq(Pseqlist p,int i,datatype x) /* 在 i 之后插入一个元素 x
4、 */int j;if(p-n=p-maxnum)printf(overflow);return(0);if(ip-n )printf(not exist);return(0);for(j=p-n-1; j=i+1; j-)p-elementj+1=p-elementj;p-elementi+1=x;p-n+;return(1);void print(Pseqlist p) /* 打印顺序表中的元素 */int i;for(i=0;in;i+)printf(%d ,p-elementi);第 4 页 共 10 页int FinMax(Pseqlist p)int max=p-element0;
5、int i;for(i=1;in;+i)if(maxelementi)max=p-elementi;return max;int FinMin(Pseqlist p)int min=p-element0;int i;for(i=1;in;+i)if(minp-elementi)min=p-elementi;return min;main()Pseqlist p;int m,n,i,x,k;printf(input the size of seqlist m:); /* 输入顺序表的最大空间 m,建立空的顺序表 */scanf(%d,p=creatnulllist_seq(m);printf(i
6、nput the real number of seqlist n(nelement=(datatype *)malloc(sizeof(datatype)*m);if(p-element!=NULL)p-maxnum=m;p-n=0;return(p);else free(p);printf(out of space);return NULL;Pseqlist init_seq(Pseqlist p,int n) /* 初始化空的顺序表,即填充数据,顺序表的实际元素个数 n 由参数提供*/int i;printf(输入 10 个分数:输入 10 个名字:);for(i=0;ielementi
7、.score,p-elementi.name);p-n=n;第 6 页 共 10 页return(p);int insertpost_seq(Pseqlist p,int i,datatype x) /* 在 i 之后插入一个元素 x */int j;if(p-n=p-maxnum)printf(overflow);return(0);if(ip-n )printf(not exist);return(0);i-=2;for(j=p-n-1; j=i+1; j-)p-elementj+1=p-elementj;p-elementi+1=x;p-n+;return(1);int FinMax(P
8、seqlist p)int max=p-element0.score;int i;for(i=1;in;+i)if(maxelementi.score)max=p-elementi.score;return max;int FinMin(Pseqlist p)int min=p-element0.score;int i;for(i=1;in;+i)if(minp-elementi.score)min=p-elementi.score;return min;第 7 页 共 10 页void print(Pseqlist p) /* 打印顺序表中的元素 */int i;for(i=0;in;i+)
9、printf(姓名:%s 分数:%d,p-elementi.name,p-elementi.score);main()Pseqlist p;int m,n,i,x,k;datatype aa;printf(input the size of seqlist m:); /* 输入顺序表的最大空间 m,建立空的顺序表 */scanf(%d,p=creatnulllist_seq(m);printf(input the real number of seqlist n(n/* 定义链接表元素类型。应根据需要定义 */#define NULL 0typedef int position;typedef
10、 struct studentint score;第 8 页 共 10 页char name20;DataType;struct Node; /* 单链表结点类型 */typedef struct Node *PNode; /* 结点指针类型 */typedef struct Node *List; /* 单链表类型 */struct Node /* 单链表结点结构 */DataType info;PNode link;printlist(List L) List p;p=L-link;printf(The list are:);while(p!=NULL)printf(%d,p-info);
11、p=p-link;printf(n);insertList(List L,position p,DataType x) position i;List s,q;i=0;q=L;while(q-link!=NULL&ilink;i+;/*q 不为 NULL*/s=(List)malloc(sizeof(struct Node);s-info=x;s-link=q-link;q-link=s;deleteList(List L,position p)position i;List s,q;i=0;q=L;while(ilink;第 9 页 共 10 页i+;/*以上程序段使得 q 指向 ap-1*
12、/s=q-link; /*s 指向 ap*/q-link = q-link-link;free(s);deleteListX(List L,DataType x) List q,s;q=L;while(q-link!=NULL&q-link-info.score!=x.score)q=q-link;if (q-link=NULL) return;s=q-link; /*s 指向 ap*/q-link = q-link-link;/free(s);int ListIsNull(List L) if(L-link=NULL) return 1;else return 0;List createNu
13、lllist() List s;s=(List)malloc(sizeof(List);s-info.score=100;s-link=NULL;return s;DeleteLess(List L,int data)List T=L;while(L!=NULL)if(L-info.scoreinfo);L=L-link;void FindLess(List L,int data)while(L!=NULL)if(L-info.scoreinfo.name,L-info.score);第 10 页 共 10 页L=L-link;main() List head;int i=0,X;head=createNulllist();printf(请先输入学生的分数,再输入学生的姓名:n);for(;i10;+i)DataType test;scanf(%d%s,insertList(head,i,test);printf(请输入节点数据);scanf(%d,FindLess(head,X);DeleteLess(head,X);printlist(head);getch();备注:以上各项空白处若填写不够,可自行扩展