1、顺序表和单链表实验报告数据结构实验报告一、顺序表操作验证1. 实验目的 掌握线性表的顺序存储结构; 验证顺序表及其基本操作的实现; 掌握数据结构及算法的程序实现的基本方法。2. 实验内容 建立含有若干个元素的顺序表; 对已建立的顺序表实现插入、删除、查找等基本操作。3.设计与编码#include#include#includestruct LinearList int *list; int size;int MaxSize;typedef struct LinearList LIST;void InitList(LIST *L,int ms) if(L-list=(int*)malloc(ms
2、 *sizeof(int)=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+) pr
3、intf(%d ,L-listi); printf(n);int 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
4、(LIST *L,int rc) int i,n; if(rc=L-size) return -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)
5、printf(请输入元素值,输入0结束插入操作:); fflush(stdin); scanf(%d,&i); if(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); else printf(有符合条件的元素
6、,位置为:%dn,r+1); while(1) printf(请输入删除元素值,输入0结束查找操作:); fflush(stdin); scanf(%d,&i); if(i=0) break; r=DeleteList1(&LL,i); if(r0) printf(没找到n); else printf(有符合条件的元素,位置为:%dn线性表为:,r+1); OutputList(&LL); while(1) printf(请输入删除元素位置,输入0结束查找操作:); fflush(stdin); scanf(%d,&r); if(r=0) break; i=DeleteList2(&LL,r-
7、1); if(i0) printf(位置越界n); else printf(线性表为:); OutputList(&LL); 4.运行结果二、 单链表操作验证1. 实验目的 掌握线性表的链式存储结构; 验证单链序表及其基本操作的实现; 进一步掌握数据结构及算法的程序实现的基本方法。2. 实验内容 用头插法(或尾插法)建立带头结点的单链表; 对已建立的单链表实现插入、删除、查找等基本操作。3.设计与编码#include#includetypedef struct list int data; struct list *next;LIST;void InitList(LIST *p) *p=NUL
8、L;void InsertList1(LIST *p,int item,int rc) int i; LIST *u,*q,*r; u=(LIST *)malloc(sizeof(LIST); u-data=item; for(i=0,r=*p;inext; if(r=*p) *p=u; else q-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
9、) *p=u; else q-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) *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; f
10、or(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);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:指定
11、位置追加 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%d,&i,&rc); InsertList1(&p,i,rc); break; case 2: printf(请输入新增结点键值:); scanf(%d,&i); InsertList2(&p,i); break; case 3: printf(请输入要查找结点的键值:); s
12、canf(%d,&i); rc=FindList(p,i); if(rc0) printf( 位置为%dn,rc); else printf( 没找到n); break; case 4: printf(请输入要删除结点的键值:); scanf(%d,&i); rc=DeleteList(&p,i); if(rc=0) printf( 删除成功n,rc); else printf( 没找到n); break; case 5: printf(链表内容为:); OutputList(p); break; case 6: FreeList(&p); break; 4.运行结果三、心得体会在本次实验中,让我对线性表和链表有了充分的理解,也对数据结构这门课程有了进一步的理解。同时,我也认识到了c语言的确是编程的基础,希望自己把基础加以巩固。调试过程中总是遇到一些小问题,如漏了分号,还有就是不知一些代码如何写,通过看书和上网查资料解决了。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1