数据结构实验指导.docx
- 文档编号:3253886
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:122
- 大小:895.99KB
数据结构实验指导.docx
《数据结构实验指导.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导.docx(122页珍藏版)》请在冰豆网上搜索。
数据结构实验指导
.
数据结构实验指导书
宁夏师范学院计算机教研室
实验1线性表的抽象数据类型的实现
实验目的
1)掌握线性表的顺序存储结构和链式存储结构;
2)熟练掌握顺序表和链表基本算法的实现;
3)掌握利用线性表数据结构解决实际问题的方法和基本技巧;
4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);
5)按时提交实验报告。
实验环境
计算机、C语言程序设计环境
实验学时
2学时,必做实验。
实验内容
一、顺序表的基本操作实现实验
要求:
数据元素类型ElemType取整型int。
按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):
1)创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在25之内;
2)打印(遍历)该线性表(依次打印出表中元素值);
3)在线性表中查找第i个元素,并返回其值;
4)在线性表中第i个元素之前插入一已知元素;
5)在线性表中删除第i个元素;
6)求线性表中所有元素值(整数)之和;
二、链表(带头结点)基本操作实验
要求:
数据元素类型ElemType取字符型char。
按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):
1)创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;
2)打印(遍历)该链表(依次打印出表中元素值);
3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;
4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;
5)在链表中按照有序方式插入一已知字符元素;
6)在线性表中删除第i个结点;
7)计算链表的长度。
实验步骤
一、顺序表的源程序
#include
#include
#include
intlist[25];inti,n,a,sum=0,k,l;
inteleminsert;
/*------------------创建函数--------------*/
voidinitlist()
{
printf("Pleaseinputthetotaloftheelems:
");
scanf("%d",&n);
if(n>25||n<1){printf("ERROE!
");return;}
printf("Pleaseinputtheelems:
...\n");
for(i=0;i {scanf("%d",&list[i]); } return; } /*------------------打印函数--------------*/ voidPrint(intlist[],intn) { intj; for(j=0;j printf("%d\t",list[j]); printf("\n"); return; } /*------------------查找函数------------*/ intSearch(intlist[],intn,intm) { if(m<1||m>n){printf("ERROR! \n");return;} elseprintf("Theelemis%dat%dplace\n",list[m-1],m); return; } /*----------------插入函数------------*/ voidInsert(intlist[],intn,intm,intelem) { intj; if(m<1||m>n){printf("ERROR! \n");return;} for(j=n-1;j>=m-1;i--) {list[j+1]=list[j];} list[m-1]=elem; n=n+1; printf("Thenewlistare: "); Print(list,n); return; } /*---------------删除函数-----------*/ voidDelete(intlist[],intn,intm) { intq;intj; if(m<1||m>n) {printf("ERROR! \n");return;} j=list[m-1]; for(q=m-1;q<=n;q++) {list[q]=list[q+1];} printf("Thenewlistare: "); Print(list,n-1); free(j); return; } /*-------------求和函数------------*/ voidSum(intlist[],intn,intsum) { intj; for(j=0;j {sum=sum+list[j];} printf("Thesumis: %d",sum); return; } voidmenu() { intj; /*------------菜单函数------------*/ menulab: printf("**********************MENU******************\n\n"); printf("Createanewintlist: ...................press1\n\n"); printf("Printthewholelist: ....................press2\n\n"); printf("Searchbyorder: ........................press3\n\n"); printf("Inserttheelemintheplacei: ...........press4\n\n"); printf("Deletetheelembyorder: ................press6\n\n"); printf("Sumalleleminthelist: ................press7\n\n"); printf("exittheprograme: .......................press0\n\n"); printf("**********************END*******************\n\n"); printf("Pleasechoosethenumberfrom(0~7)....."); checklabel: scanf("%1d",&j);getchar(); if(j<0||j>7) {printf("Error! Pleasechooseagain......"); gotochecklabel; } printf("\n\tYouchoosethenumber%d\n",j); printf("\n\tPressanykeytocontinue....."); getchar(); clrscr();/*clearscreen*/ switch(j) { case1: /*创建任意整数线性表*/ initlist(); clrscr();/*clearscreen*/ gotomenulab; case2: /*打印(遍历)该线性表*/ printf("Theoriginallistis: "); Print(list,n); printf("Pressanykeytocontinue....."); getchar(); clrscr();/*clearscreen*/ gotomenulab; case3: /*在线性表中查找第i个元素,并返回其值*/ printf("InputwhichLNodeyouwanttoSearch(Inputnumber): "); scanf("%d",&a); getchar(); Search(l,n,a); printf("Pressanykeytocontinue....."); getchar(); clrscr();/*clearscreen*/ gotomenulab; case4: /*在线性表中第i个元素之前插入一已知元素*/ printf("Pleaseinputtheelem'splacewhereyouwanttoinsert"); scanf("%d",&k); printf("Inputtheelemwhichyouwanttoinsert: "); scanf("%d",&eleminsert); Insert(list,n,k,eleminsert); printf("Pressanykeytocontinue....."); getchar(); clrscr();/*clearscreen*/ gotomenulab; case5: /*在线性表中删除第i个元素*/ printf("Pleaseinputtheelemyouwanttodelete: "); scanf("%d",&l); n=n+1; Delete(list,n,l); n=n-1; printf("Pressanykeytocontinue....."); getchar(); clrscr();/*clearscreen*/ gotomenulab; case6: /*求线性表中所有元素值(整数)之和*/ Sum(list,n,sum); printf("Pressanykeytocontinue....."); getchar(); clrscr();/*clearscreen*/ gotomenulab; case0: /*退出程序*/ printf("Pressanykeytocontinue....."); getchar(); exit(0); }} voidmain() { voidmenu(); menu(); } 二、链表(带头结点)的源程序 #include #include structLNode{ charelem; structLNode*next; }*l,*p,*new; inti,a,k,n;charc,s; /*----------------创建函数-------------*/ voidintilist(void) { l=(structLNode*)malloc(sizeof(structLNode)); l->next=NULL; clrscr(); printf("Inputthetotaloftheelems: ....."); scanf("%d",&n); getchar(); if(n>15) printf("Error! "); for(i=n;i>0;i--) { new=(struct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导