《C语言,链式存储的线性表.doc》由会员分享,可在线阅读,更多相关《C语言,链式存储的线性表.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、宁波大红鹰学院实验报告实验名称: 实验三 链式存储的线性表 学院: 专业: 年级: 级 小组成员1: 学号: 职责: 小组成员2: 学号: 职责: 报告 小组成员3: 学号: 职责: 实验时间: 2014年 3月 12日 实验类型: 验证性 实验地点: 成绩: 指导教师签字: 实验报告基本内容要求:一、实验目的和要求;二、实验内容和原理;三、主要仪器设备;四、操作方法与实验步骤;五、实验数据记录和处理;六、实验结果与分析;七、讨论、心得一、 实验目的1. 了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。2. 重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点
2、;并进一步学习结构化的程序设计方法。3. 掌握单链表的基本操作,如创建、显示、删除等。二、 实验内容三、 课堂讨论题(30分)(1)线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否能够克服上述三个弱点,请给出理由。 答 能。线性表的链式存储结构是不连续的,指针代表逻辑顺序,所以插入删除操作时,只需修改相关节点的指针,不需要移动大量元素。采用动态存储分配,不会造成内存浪费和溢出。(2)请分析顺序存储结构和链式存储结构的异同点。同:顺序存储结构和
3、链式存储结构都是计算机内存放线性表的基本存储结构异: 顺序结构的优点:1.逻辑相邻,物理相邻;2.可随机存取任一元素;3.存储空间使用紧凑缺点:1.插入删除操作需要移动大量元素;2.由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;3.表的容量难以扩充链式存储的优点:1.线性表的链式存储结构是不连续的,指针代表逻辑顺序,所以插入删除操作时只需修改相关节点的指针,不需要移动大量元素。2.采用动态存储分配,不会造成内存浪费和溢出。 缺点: 1.不能随机存储元素 2.存储密度小,存储空间利用率低 3.有些语言中不支持指针,不容易实现四、 算法设计题1)统计单链表中值为x的元素有多
4、少个?(50分)要求:(1)x的值从键盘输入 2)从单链表中删除min和max之间的所有元素。(+20分)要求: (1)指定的值min和max由键盘输入;(2)程序能处理空链表的情况。 可以按照如下的参考程序,进行程序段填空,也可以自己从头开始编写,只要能实现功能即可。五、 主要仪器设备计算机六、 实验步骤 第一题:#include #include/补充必要的语句以及结构体 typedef struct node int data; struct node *next;LNode;LNode *L;LNode *CreateList();void Display(LNode *L);int
5、Searchx(LNode *L,int x);int main(int argc, char *argv)int x,s;printf(创建单链表,输入0表示结束-n);L=CreateList();printf(创建后的链表为-n);Display(L);printf(请输入你要查找的数据-n);printf(x=);scanf(%d,&x);s=Searchx(L,x);printf(该链表中值为%d的元素有%d个n,x,s);getchar();return 0;LNode *CreateList()LNode *p,*q,*h;int x;/创建链表h=(LNode *)malloc
6、(sizeof(LNode); /创建头结点h-next=NULL;q=h; while(1)printf(输入数据:);scanf(%d,&x);if(x=0) break; p=(LNode *)malloc(sizeof(LNode); /申请一个结点赋值给p p-data=x;p-next=NULL;q-next=p;q=q-next;return h;void Display(LNode *L)LNode *p;p=L-next;while(p!=NULL) printf(%d-,p-data); p=p-next;printf(n);int Searchx(LNode *L,int
7、 x)int s=0;LNode *p;p=L-next;while(p!=NULL) if(p-data=x) s+; p=p-next;return s;第二题:#include #include typedef struct node int data; struct node *next; LNode,LinkList;LNode *L; LNode *CreateList();void DeleteList(LNode *L,int main,int max);void Display(LNode *L);main()int max,min;printf(创建单链表,输入0表示结束-
8、n);L=CreateList();printf(创建后的链表为-n);Display(L);printf(请输入你要删除的数据区域-n);printf(min=);scanf(%d,&min);printf(max=);scanf(%d,&max);DeleteList(L,min,max);printf(删除%d和%d之间的数据后-n,min,max);Display(L);getchar();LNode *CreateList()LNode *p,*q,*h;int x; /创建链表h=(LNode *)malloc(sizeof(LNode); h-next=NULL;q=h; whi
9、le(1)printf(输入数据:);scanf(%d,&x);if(x=0) break;p=(LNode *)malloc(sizeof(LNode); p-data=x;p-next=NULL;q-next=p;q=q-next;return h;void Display(LNode *L)LNode *p; p=L-next; while(p!=NULL) printf(%d-,p-data); p=p-next; printf(n);void DeleteList(LNode *L,int min,int max)LNode *p,*q;p=L-next;q=L;while(p-next!=NULL)if(p-next-datamin&p-next-datanext;p-next=q-next; free(q);elsep=p-next;七、 实验结果第一题:第二题:八、 心得体会这次的实验让我们了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。线性表的基本操作在两种存储结构上的实现;掌握了单链表的基本操作,如创建、显示、删除等。