武汉理工大学数据结构线性表实验报告.docx
- 文档编号:25158171
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:11
- 大小:91.51KB
武汉理工大学数据结构线性表实验报告.docx
《武汉理工大学数据结构线性表实验报告.docx》由会员分享,可在线阅读,更多相关《武汉理工大学数据结构线性表实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
武汉理工大学数据结构线性表实验报告
武汉理工大学理学院数学系课程实验报告
课程名称:
数据结构与算法
班级
数学类1402班
日期
2015年11月1日
成绩评定
姓名
明钊
实验室
老师签名
学号
0121414670211
实验名称
实验一线性表的设计与实现
所用软件
Visuac++6.0,word
实
验
目
的
及
内
容
实验目的:
掌握在visualc++下线性表的两种存储结构:
顺序存储和链式存储各自的编程框架;
实验内容:
掌握顺序表和单链表下建表、遍历、插入、删除、求前驱、求后继等算法的实现;
实
验
原
理
步
骤
、
一、实现顺序表的建立、插入数据、删除、遍历、求长度
各函数代码及解释如下:
StatusSqlistCreate(SqList&L,intlen)
//顺序表的建立函数:
从键盘接收数据,依次放入顺序表
{inti;
for(i=0;i {printf("请输入第%d个元素",i+1); scanf("%d",&L.elem[i]); } return1; L.length=len; } intListLength(SqListL)//求顺序表的长度 {printf("\n新表长度为%d",L.length); returnL.length; } voidListPrintf(SqList&L,intlen)//顺序表的遍历 { inti; for(i=0;i printf("%d\t",L.elem[i]); } StatusListInsert(SqList&L,inti,ElemTypee)//在第i个元素前插入元素e { ElemType*newbase,*q,*p; if(i<1||i>L.length+1) returnERROR; if(L.length==L.listsize) {newbase=(ElemType*)realloc(L.elem, (L.listsize+LIST_INCREMENT)*sizeof(ElemType)); if(! newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LIST_INCREMENT; } q=L.elem+i-1; for(p=L.elem+L.length-1;p>=q;--p) *(p+1)=*p; *q=e; ++L.length; ListPrintf(L,L.length); ListLength(L); returnOK; } StatusListDelete(SqList&L,inti,ElemType&e)//删除第i个元素之前的元素 { ElemType*p,*q; if(i<1||i>L.length) returnERROR; p=L.elem+i-1; e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; L.length--; returnOK; } 测试主程序如下: Voidmain(void) {SqListL; InitList(L); printf("初始化L后,L.length=%d,L.listsize=%d,L.elem=%u\n",L.length, L.listsize,L.elem); intlength; printf("输入表的长度length="); scanf("%d",&length); ListCreate(L,length); ListPrintf(L,length); intn,m; printf("\n请输入要插入的位置(第n个元素前)n="); scanf("%d",&n); printf("请输入要插入的数据m="); scanf("%d",&m); ListInsert(L,n,m); inti,e; printf("输入要删除的第i个元素i="); scanf("%d",&i); ListDelete(L,i,e); } 实 验 结 果 及 分 析 : 二、单链表的建立与操作 各函数如下: StatusCreateList_L(LinkList&L,intn)//用头插法建立一个长度为n的单链表 { inti;LinkListp,s; L->next=NULL; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL;p=L; for(i=n;i>0;i--) { s=(LinkList)malloc(sizeof(LNode)); printf("输入新节点: "); scanf("%d",&s->data); p->next=s; p=p->next;p->next=NULL; } returnOK; } StatusListprintf(LinkList&L)//遍历函数 { LinkListp=L;intlen=0,e; p=p->next; while(p) { len++; e=p->data; p=p->next; printf("%d",e); } printf("该链表的长度为%d",len); returnOK; } StatusListInsert(LinkList&L,inti,ElemTypee)//在第i个元素前插入一个元素e { intj=0; LinkLists,p=L; while(p&&j {j++; p=p->next; } if(! p||j>i-1) returnERROR; s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; Listprintf(L); returnOK; } StatusListdelete(LinkList&L,inti,ElemType&e)//删除第i个元素 { intj;LinkListp,q; p=L;j=0; while(p->next&&j j++;p=p->next; }//循环结束后,p指针指向第i-1个元素,而p->next指向第i个节点 if(! (p->next)||j>i-1)return0;//删除位置不合理 q=p->next;p->next=q->next;e=q->data; printf("删除的元素为%d",e);printf("\n"); free(q); Listprintf(L); returnOK; } StatusForewardElist(LinkList&L,inti,ElemType&v)//第i个元素的前驱 { intj;LinkListp,q; p=L;j=0; if(i==1)return0; while(p->next&&j j++;p=p->next; } if(! (p->next)||j>i-2)return0; q=p->next;p->next=q->next; v=q->data; printf("第%d个元素的前驱为v=%d",i,v); returnOK; } StatusBackwardlist(LinkList&L,inti,ElemType&x)//第i个元素的后继 { intj;LinkListp,q; p=L;j=0; while(p->next&&j j++;p=p->next; } if(! (p->next)||j>i-1||p->next==NULL)return0; q=p->next;p->next=q->next; x=q->data; printf("第%d个元素的后继为x=%d",i,x); returnOK; } 测试主函数如下: Voidmain(void) {LinkListL; inta; inti,j; intm; intk,l,v,x; ElemTypee; InitList(L); printf("请输入初始链表的长度"); scanf("%d",&a); CreateList_L(L,a); Listprintf(L); printf("要插入的位置(第i个元素前)i="); scanf("%d",&i);printf("要插入的元素m=");scanf("%d",&m); ListInsert(L,i,m); printf("删除的位置(第j个元素)j=");scanf("%d",&j); Listdelete(L,j,e); printf("你要求的第i个元素的前驱"); scanf("%d",&k); ForewardElist(L,k,v); printf("你要求的第i个元素的后继"); scanf("%d",&l); Backwardlist(L,l,x); } 程序运行结果截图如下: 三: 实验结果分析 通过通过以上函数的编写,本人掌握了顺序表的建立、插入数据、删除、遍历、 求长度以及单链表的建立(头插法)、插入数据、删除、遍历、求第i个元素的前驱、第i个元素的后继、求长度的算法,在编程中,难点是数据的插入与删除,重点要掌握顺序表与单链表的建立以及元素的插入与删除的算法,注意语句的先后顺序,注意单链表中结点之间的关系.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学 数据结构 线性 实验 报告