《顺序表和单链表实验报告.doc》由会员分享,可在线阅读,更多相关《顺序表和单链表实验报告.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.数据结构实验报告一、顺序表操作验证1. 实验目的 掌握线性表的顺序存储结构; 验证顺序表及其基本操作的实现; 掌握数据结构及算法的程序实现的基本方法。2. 实验内容 建立含有若干个元素的顺序表; 对已建立的顺序表实现插入、删除、查找等基本操作。3.设计与编码#include#include#includestruct LinearListint *list;int size;int MaxSize;typedef struct LinearList LIST;void InitList(LIST *L,int ms)if(L-list=(int*)malloc(ms *sizeof(int)
2、=NULL)printf(内存申请错误!n);exit(1);L-size=0;L-MaxSize=ms;int InsertList(LIST *L,int item,int rc) int i;if(L-size=L-MaxSize)return-1;if(rcL-size)rc=L-size;for(i=L-size-1;i=rc;i-)L-listi+1=L-listi;L-listrc=item;L-size+;return 0;void OutputList(LIST *L)int i;for(i=0;isize;i+)printf(%d ,L-listi);printf(n);i
3、nt FindList(LIST *L,int item)int i;for(i=0;isize;i+)if(item=L-listi)return i;return -1;int DeleteList1(LIST *L,int item)int i,n;for(i=0;isize;i+)if(item=L-listi)break;if(isize)for(n=i;nsize-1;n+)L-listn=L-listn+1;L-size-;return i;return -1;int DeleteList2(LIST *L,int rc)int i,n;if(rc=L-size)return -
4、1;for(n=rc;nsize-1;n+)L-listn=L-listn+1;L-size-;return 0;void main()LIST LL;int i,r;printf(list addr=%ptsize=%dtMaxSize=%dn,LL.list,LL.size,LL.MaxSize);InitList(&LL,100);printf(list addr=%ptsize=%dtMaxSize=%dn,LL.list,LL.size,LL.MaxSize);while(1)printf(请输入元素值,输入0结束插入操作:);fflush(stdin);scanf(%d,&i);i
5、f(i=0)break;printf(请输入插入位置:);scanf(%d,&r);InsertList(&LL,i,r-1);printf(线性表为:);OutputList(&LL);while(1)printf(请输入查找元素值,输入0结束查找操作:);fflush(stdin);scanf(%d,&i);if(i=0)break;r=FindList(&LL,i);if(r0)printf(没找到n);elseprintf(有符合条件的元素,位置为:%dn,r+1);while(1)printf(请输入删除元素值,输入0结束查找操作:);fflush(stdin);scanf(%d,&
6、i);if(i=0)break;r=DeleteList1(&LL,i);if(r0)printf(没找到n);elseprintf(有符合条件的元素,位置为:%dn线性表为:,r+1);OutputList(&LL);while(1)printf(请输入删除元素位置,输入0结束查找操作:);fflush(stdin); scanf(%d,&r);if(r=0)break;i=DeleteList2(&LL,r-1);if(i0)printf(位置越界n);elseprintf(线性表为:);OutputList(&LL);4.运行结果二、 单链表操作验证1. 实验目的 掌握线性表的链式存储结
7、构; 验证单链序表及其基本操作的实现; 进一步掌握数据结构及算法的程序实现的基本方法。2. 实验内容 用头插法(或尾插法)建立带头结点的单链表; 对已建立的单链表实现插入、删除、查找等基本操作。3.设计与编码#include#includetypedef struct listint data;struct list *next;LIST;void InitList(LIST *p)*p=NULL;void InsertList1(LIST *p,int item,int rc)int i;LIST *u,*q,*r;u=(LIST *)malloc(sizeof(LIST);u-data=i
8、tem;for(i=0,r=*p;inext;if(r=*p)*p=u;elseq-next=u;u-next=r;void InsertList2(LIST *p,int item)LIST *u,*q,*r;u=(LIST *)malloc(sizeof(LIST);u-data=item;for(r=*p;r!=NULL&r-datanext);if(r=*p)*p=u;elseq-next=u;u-next=r;int DeleteList(LIST *p,int item)LIST *q,*r;q=*p;r=q;if (q=NULL)return 1;if(q-data=item)*
9、p=q-next;free (r);return 0;for(;q-data!=item&q-next!=NULL;r=q,q=q-next);if(q-data=item)r-next=q-next;free(q);return 0;return 1;int FindList(LIST *p,int item)int i;for(i=1;p-data!=item&p!=NULL;p=p-next,i+);return(p=NULL)?-1:i;void OutputList(LIST *p)while(p!=NULL)printf(%4d,p-data);p=p-next;printf(n)
10、;void FreeList(LIST *p)LIST*q,*r;for(q=*p;q!=NULL;)r=q;q=q-next;free(r);*p=NULL;int main()LIST *p;int op,i,rc;InitList(&p);while(1)printf(请选择操作 1:指定位置追加 2:升序追加 3:查找结点n);printf( 4:删除结点 5:输出结点 6:清空链表 0:退出n);fflush(stdin);scanf( %d,&op);switch(op)case 0:return -1;case 1:printf(请输入新增结点键值和位置:);scanf( %d%
11、d,&i,&rc);InsertList1(&p,i,rc);break;case 2:printf(请输入新增结点键值:);scanf(%d,&i); InsertList2(&p,i);break;case 3:printf(请输入要查找结点的键值:);scanf(%d,&i);rc=FindList(p,i);if(rc0)printf( 位置为%dn,rc);elseprintf( 没找到n);break;case 4:printf(请输入要删除结点的键值:);scanf(%d,&i);rc=DeleteList(&p,i);if(rc=0)printf( 删除成功n,rc);elseprintf( 没找到n);break;case 5:printf(链表内容为:);OutputList(p);break;case 6:FreeList(&p);break;4.运行结果三、心得体会在本次实验中,让我对线性表和链表有了充分的理解,也对数据结构这门课程有了进一步的理解。同时,我也认识到了c语言的确是编程的基础,希望自己把基础加以巩固。调试过程中总是遇到一些小问题,如漏了分号,还有就是不知一些代码如何写,通过看书和上网查资料解决了。
限制150内