数据的结构及算法实验的指导书.doc
《数据的结构及算法实验的指导书.doc》由会员分享,可在线阅读,更多相关《数据的结构及算法实验的指导书.doc(31页珍藏版)》请在课桌文档上搜索。
1、实验一 顺序表的实现和应用一、实验目的 1、掌握顺序表的定义; 2、掌握顺序表的根本操作,如查找、插入、删除与排序等。二、实验内容1、编写函数,实现在顺序表中查找值为x的元素的位置的简单顺序查找算法,编写主函数验证此算法,并分析算法的时间复杂度2、编写函数,实现在顺序表中删除第i个位置上的元素,编写主函数验证此算法,并分析算法的时间复杂度3、编写函数,实现在顺序表中第i个位置上插入值为x的元素,编写主函数验证此算法,并分析算法的时间复杂度4、编写函数,实现在顺序表中将所有偶数排在所有奇数前面,编写主函数验证此算法,并分析算法的时间复杂度三、实验提示1、#include #define MAXS
2、IZE 20typedef structint dataMAXSIZE;int last;list;/*编写函数,实现在顺序表中查找值为x的元素的位置的简单顺序查找算法,编写主函数验证此算法,并分析算法的时间复杂度 */int locate(list *l,int x)/代码int i;for(i=0;ilast;i+)if(l-datai=x)return i+1;return -1;main()list b;int x,i,p;b.last=10;for(i=0;ib.last;i+)b.datai=i+2;printf(请输入x的值:);scanf(%d,&x);p=locate(&b,
3、x);if(p=-1)printf(no!);elseprintf(position=%dn,p);时间复杂度T(n)=O(n);2、#include #define MAXSIZE 20typedef structint dataMAXSIZE;int last;list;/*编写函数,实现在顺序表中删除第i个位置上的元素,编写主函数验证此算法,并分析算法的时间复杂度 */int delete(list *l,int i)int j,k,p; /定义一个用来保存被删原素;if(i=0&ilast)/只承受有效输入for(j=0;jlast;j+) /遍历数组if(j=i-1)/匹配p=l-d
4、ataj;/保存被删原素;for(k=j;klast;k+)/前进一位;l-datak=l-datak+1;break; /退出循环l-last=l-last-1;return p; /对于此题来说可以输出p;return 0;main()list b;int x,i;b.last=10;for(i=0;ib.last;i+)b.datai=i+2;printf(请输入x的值:);scanf(%d,&x);if(delete(&b,x)!=0)for(i=0;ib.last;i+)printf(%3d,b.datai);elseprintf(Error!);/时间复杂度T(n)=O(n);3、
5、#include #define MAXSIZE 20typedef structint dataMAXSIZE;int last;list;/*编写函数,实现在顺序表中第i个位置上插入值为x的元素,编写主函数验证此算法,并分析算法的时间复杂度 */int insert(list *l,int x,int i)int j,k;if(ilast+1&i0)if(i=l-last+1)/特殊值last+1 要插入到整个数组之后l-datal-last=x;elsefor(j=0;jlast;j+)if(j=i-1)/匹配for(k=l-last;kj;k-)/将所选插入位置之后原素后移l-data
6、k=l-datak-1;l-dataj=x;/把x赋值给所选位置break;l-last=l-last+1;/数值长度加一return 1;return 0; /无效位置main()list b;int x,i;b.last=10;for(i=0;ib.last;i+)b.datai=i+2;printf(请输入x的值:);scanf(%d,&x);if(insert(&b,66,x)!=0)for(i=0;ib.last;i+)printf(%3d,b.datai);elseprintf(Error!);/时间复杂度T(n)=O(n);4、#include #define MAXSIZE 2
7、0typedef structint dataMAXSIZE;int last;list;/*编写函数,实现在顺序表中将所有偶数排在所有奇数前面,编写主函数验证此算法,并分析算法的时间复杂度 */void fun(list *l)/这个代码有点晦涩,但空间时间复杂度是鸡儿低int i,ou=0,temp;/i计数,ou代表偶数个数for(i=0;ilast;i+)/循环if(l-datai%2=0)/判断是不是偶数,如果是偶数的话和当前第ou个位置的原素交换位置temp=l-dataou;l-dataou=l-datai;l-datai=temp;ou+=1;/偶数个数加一printf(当前数
8、组中偶数有%d个,奇数有%d个:n,ou,l-last-ou);main()list b;int i=0,m=0;b.last=10;printf(请输入数组元素的值:n);for(i=0;ib.last;i+)printf(b.data%d=,i);scanf(%d,&b.datai);fun(&b);for(i=0;ib.last;i+)printf(%3d,b.datai);/时间复杂度为T(n)=O(n);四、实验报告要求1、撰写实验报告;2、对实验中出现的问题和结果进展总结。实验二 链表的实现和应用一、实验目的 1、掌握链表的定义; 2、掌握链表的根本操作,如查找、插入、删除、排序等
9、。二、实验内容1、单链表的创建2、单链表的查找3、单链表的排序4、单链表的删除5、链表的应用-约瑟夫环问题三、实验提示1、/创建单链表,要求:结点个数为n个,每个节点数据域的值必须小于m。编辑主函数验证之。#include #include typedef struct aa int data; struct aa *next; NODE;NODE *Creatlink(int n, int m)int i;NODE *tou,*p;/tou 头结点tou=(NODE*)malloc(sizeof(NODE);/创建并初始化头结点tou-next=NULL;tou-data=n;printf(
10、请输入%d个小鱼%d的数,中间用空格隔开:n,n,m);for(i=0;idata);if(p-data=m)printf(输入的第%d个数据大于%d,GGn,i+1,m);exit(0);/程序强制中断,好似是在头文件stdlib.h里p-next=tou-next;tou-next=p;return tou;outlink(NODE *h) NODE *p; p=h-next; printf(nnTHE LIST :nn HEAD ); while(p) printf(-%d ,p-data); p=p-next; printf(n);main() NODE *head; head=Cre
11、atlink(8,22); outlink(head);2、/查找值为ch的节点在链表中是否出现,如果存在,返回在链表中位序,如果不存在返回0#include #include #define N 8typedef struct list int data; struct list *next; SLIST;SLIST *creatlist(char *);void outlist(SLIST *);int fun( SLIST *h, char ch)int i;SLIST *p;p=h-next;/p赋值为寿元节点for(i=0;idata=ch)return i+1;p=p-next;r
12、eturn 0;main() SLIST *head; int k; char ch; char aN=m,p,g,a,w,x,r,d; head=creatlist(a); outlist(head); printf(Enter a letter:); scanf(%c,&ch); k=fun(head,ch); if (k=0) printf(nNot found!n); else printf(The sequence number is : %dn,k);SLIST *creatlist(char *a)int i;SLIST *tou,*p;tou=(SLIST*)malloc(si
13、zeof(SLIST);/创建并初始化头结点tou-data=N;tou-next=NULL;for(i=0;idata=ai;p-next=tou-next;tou-next=p;return tou;void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(nThe list is NULL!n); else printf(nHead); do printf(-%c,p-data); p=p-next; while(p!=NULL); printf(-Endn); 3、/去偶操作,链表中各节点按数据域递增有序,函数fun的功
14、能是,删除链表中数据域值一样的节点,使之只保存一个#include #include #define N 8typedef struct list int data; struct list *next; SLIST;void fun( SLIST *h)SLIST *p,*shanchu;/用于遍历的指针p,用于删除的指针shanchup=h-next;/p为寿元节点while(p-next!=NULL)/终止条件if(p-data=p-next-data)/判断是否有重复原素shanchu=p-next;p-next=shanchu-next;free(shanchu);elsep=p-n
15、ext;SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; p-next=0; return h;void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(nThe list is NULL!n); else printf(nHead); do printf(-%d,p-data); p=p-next; while(p!=NULL); printf(
16、-Endn); main( ) SLIST *head; int aN=1,2,2,3,4,4,4,5; head=creatlist(a); printf(nThe list before deleting :n); outlist(head); fun(head); printf(nThe list after deleting :n); outlist(head);4、/在main函数中屡次调用fun函数,每调用一次fun函数,输出链表尾部节点中的数据,并释放该节点,使得链表缩短。#include #include #define N 8typedef struct list int d
17、ata; struct list *next; SLIST;void fun( SLIST *p)SLIST *bianli,*shanchu;/遍历,删除bianli=p;while(bianli-next-next!=NULL)bianli=bianli-next;printf(%d,bianli-next-data);/输出shanchu=bianli-next;/释放free(shanchu);bianli-next=NULL;SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构 算法 实验 指导书
链接地址:https://www.desk33.com/p-27125.html