ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:57.65KB ,
资源ID:5081166      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5081166.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(级数据结构验证性实验指导书.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

级数据结构验证性实验指导书.docx

1、级数据结构验证性实验指导书实验一 线性表的顺序存储实验一、实验目的1、掌握用Visual C+6.0上机调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现二、实验内容1、顺序表基本操作的实现问题描述 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。基本要求 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。实现提示 要实现基本操作,可用实现的基本操作,也可设计简单的算法实

2、现。程序实现#include #include #includetypedef int DataType;#define maxnum 20typedef structint datamaxnum;int length;Seqlist;int insert(Seqlist *L, int i, DataType x)int j;if (i(*L).length +1)printf(n i 值不合法!);return 0;if(*L).length maxnum-1)printf(n 表满不能插入!);return 0;for (j=(*L).length;j=i;j-)(*L).dataj+1

3、=(*L).dataj;(*L).datai=x;(*L).length+;return 1;int deleteList(Seqlist *L, int i)int j;if (i(*L).length)printf (n 删除位置错误!);return 0;for (j=i+1;j=(*L).length; j+)(*L).dataj-1=(*L).dataj;(*L).length-;return 1;void creatlist(Seqlist *L)int n,i;printf(请输入顺序表L的数据个数:n);scanf(%d,&n);for (i=0;in;i+)printf(da

4、ta%d=,i);scanf(%d,&(*L).datai);(*L).length=n-1;printf(n);void printout(Seqlist *L)int i;for (i=0;i=(*L).length;i+)printf( data%d=,i);printf(%d,(*L).datai);printf(n);void main()Seqlist *L;char cmd;int i,x;L=(Seqlist*)malloc(sizeof(Seqlist);creatlist(L);doprintf(ni,I-插入n);printf(d,D-删除n);printf(q,Q-退出

5、n);docmd=getchar();while(cmd!=i)&(cmd!=I)&(cmd!=d)&(cmd!=D)&(cmd!=q)&(cmd!=Q);switch(cmd)casei:caseI: printf(nPlease input the DATA:); scanf(%d,&x); printf(nWhere?); scanf(%d,&i); insert(L,i,x); printout(L); break;cased:caseD: printf(nWhere to Delete?); scanf(%d,&i); deleteList(L,i); printout(L); br

6、eak; while(cmd!=q)&(cmd!=Q); 2、有序顺序表的合并问题描述 已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc基本要求 lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表程序实现#include #define maxnum 20typedef int DataType;typedef structDataType datamaxnum;int length;Seqlist;int MergeQL(Seqlist la,Seqlist lb, Seqlist *lc)int i,j,k;if(la.len

7、gth+1+lb.length+1maxnum)printf(n array overflow!);return 0;i=j=k=0;while (i=la.length&j=lb.length)if (la.dataidatak+=la.datai+;elselc-datak+=lb.dataj+;while (idatak+=la.datai+;while (jdatak+=lb.dataj+;lc-length=k-1;return 1;void main()Seqlist la=3,4,7,12,15,4;Seqlist lb=2,5,7,15,18,19,5;Seqlist lc;i

8、nt i;if (MergeQL(la,lb,&lc)printf(n);for (i=0;i=lc.length;i+)printf(%4d,lc.datai);printf(n);实验二 单链表实验一、实验目的1、掌握用Visual C+6.0上机调试单链表的基本方法2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现3、进一步掌握循环单链表的插入、删除、查找算法的实现二、实现内容1、单链表基本操作的实现问题描述要在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点并用指针p指示,然后申请一个由指针s 指示的结点空间,并置x

9、为其数据域值,最后修改第i-1个结点,并使x结点的指针指向第i个结点,要在带头结点的单链表h中删除第i个结点,首先要计数寻找到第i个结点并使指针p指向其前驱第i-1个结点,然后删除第i个结点并释放被删除结点空间。基本要求用链式存储结构实现存储实现提示链式存储结构不是随机存储结构,即不能直接取到单链表中某个结点,而要从单链表的头结点开始一个一个地计数寻找。程序实现# include # include typedef int DataType ;typedef struct node DataType data; /*结点的数据域*/ struct node *next; /*结点的指针域*/L

10、istNode;void Init_List(ListNode *L)(*L)=(ListNode *)malloc(sizeof(ListNode);/*产生头结点*/(*L)-next=NULL;int List_Length(ListNode *L )int n=0;ListNode *p=L-next;while(p!=NULL)n+;p=p-next;return n;ListNode* GetNode(ListNode *L,int i) int j; ListNode *p; p=L;j=0; /*从头结点开始扫描*/ while(p-next&j!=i) /*顺指针向后扫描,直

11、到p-next为NULL或i=j为止*/p=p-next;j+; if(i=j) return p; /*找到了第i个结点*/ else return NULL; /*当i0时,找不到第i个结点*/void InsertList(ListNode *L,DataType x,int i) ListNode *p,*s; p=GetNode(L,i-1); /*寻找第i-1个结点*/ if (p=NULL) /*in+1时插入位置i有错*/ printf(position error); return ; s=(ListNode *)malloc(sizeof(ListNode); s-data

12、=x;s-next=p-next;p-next=s; void DeleteList(ListNode *L ,int i)ListNode *p,*r;p=GetNode(L,i-1); /*找到第i-1个结点*/if (p=NULL|p-next=NULL) /*in时,删除位置错*/ printf(position error); return ; r=p-next; /*使r指向被删除的结点a*/p-next=r-next; /*将ai从链上删除*/free(r); /*使用头插法建立带头结点链表算法*/ListNode * CreatListF(void)char ch;ListNo

13、de *head=(ListNode *)malloc(sizeof(ListNode); /*生成头结点*/ListNode *s; /*工作指针*/head-next=NULL;ch=getchar(); /*读入第1个字符*/while(ch!=n) s=(ListNode *)malloc(sizeof(ListNode); /*生成新结点*/ s-data=ch; /*将读入的数据放入新结点的数据域中*/ s-next=head-next; head-next=s; ch=getchar(); /*读入下一字符*/return head;/*使用尾插法建立带头结点链表算法*/List

14、Node * CreatListR1(void) char ch; ListNode *head=(ListNode *)malloc(sizeof(ListNode); /*生成头结点*/ ListNode *s,*r; /*工作指针*/ r=head; /*尾指针初值也指向头结点*/ while(ch=getchar()!=n) s=(ListNode *)malloc(sizeof(ListNode); s-data=ch; r-next=s; r=s; r-next=NULL; /*终端结点的指针域置空,或空表的头结点指针域置空*/ return head;/*复制链表A中的内容到表B

15、中*/ void copy(ListNode *a, ListNode *b) ListNode *pa=a-next; ListNode *u; ListNode *rb=b; while(pa!=NULL) u=( ListNode *)malloc(sizeof(ListNode); u-data=pa-data; rb-next=u; rb=u; pa=pa-next; rb-next=NULL;/*输出带头结点的单链表*/void DisplaySL(ListNode *la, char *comment) ListNode *p ; p=la-next ; if(p) printf

16、(n%sn , comment) ; while(p) printf(%4c,p-data); p=p-next; printf(n) ;/*主函数*/void main( ) ListNode *la ,*lb,*lc;int x,i;printf(n用头插法建立链表la,请输入节点内容:);la=CreatListF();DisplaySL(la,新生成链表la节点内容:);printf(nthe length of la: %2d,List_Length(la);printf(n请输入要插入的元素:);scanf(%c,&x) ;printf(n请输入要插入的位置:);scanf(%d,

17、&i) ;InsertList(la,x,i);DisplaySL(la,插入后链表la节点内容:);printf(n请输入要删除元素的位置:);scanf(%d,&i);DeleteList(la,i);DisplaySL(la, 删除后链表la节点内容:);printf(n用尾插法建立链表lb,请输入节点内容:);fflush(stdin);lb=CreatListR1();DisplaySL(lb,新生成链表lb节点内容:);Init_List(&lc);copy(la,lc);DisplaySL(lc,复制生成的链表lc节点内容:);2、有序单链表的合并问题描述 已知单链表la和lb中

18、的数据元素按非递减有序排列,将la和lb中的数据元素,合并为一个新的单链表lc,lc中的数据元素仍按非递减有序排列。基本要求 不破坏la表和lb表的结构。程序实现#include #include typedef int DataType;typedef struct SLNode DataType data; struct SLNode * next; slnodetype;void MergeSL(slnodetype *la,slnodetype *lb,slnodetype *lc);int CreateSL(slnodetype *la,int n);void DisplaySL(s

19、lnodetype *la , char * comment);void main( ) slnodetype *la, *lb, *lc ;int n,m;la=(slnodetype *)malloc(sizeof(slnodetype);la-next=NULL;lb=(slnodetype *)malloc(sizeof(slnodetype);lb-next=NULL;lc=(slnodetype *)malloc(sizeof(slnodetype);lc-next=NULL;printf(n 输入链表la节点数:);scanf(%d,&n);printf(n 输入链表la节点内容

20、:);CreateSL(la,n);DisplaySL(la,链表la节点内容:);printf(n 输入链表lb节点数:);scanf(%d,&m);printf(n 输入链表lb节点内容:);CreateSL(lb,m);DisplaySL(lb,the content of lb:);MergeSL(la,lb,&lc); DisplaySL(lc,合成后的链表lc:);void MergeSL(slnodetype *la , slnodetype *lb,slnodetype *lc) slnodetype * pa, * pb, * pc; *lc=(slnodetype*)mal

21、loc(sizeof(slnodetype);pa=la-next; pb=lb-next; pc=*lc; while(pa&pb) pc-next=(slnodetype*)malloc(sizeof(slnodetype);pc=pc-next; if(pa-data)data) pc-data=pa-data; pa=pa-next; else pc-data=pb-data; pb=pb-next; while (pa) pc-next=(slnodetype*)malloc(sizeof(slnodetype); pc=pc-next;pc-data=pa-data; pa=pa-

22、next; /*插入lb链的剩余段*/ while(pb) pc-next=(slnodetype*)malloc(sizeof(slnodetype); pc=pc-next; pc-data=pb-data; pb=pb-next; pc-next=NULL; /*生成单链表*/int CreateSL(slnodetype *la ,int n) int i;slnodetype * p,* q;q=la;for (i=1 ; idata);q-next=p;q=p;q-next=NULL;return 1 ;/*输出单链表*/void DisplaySL(slnodetype *la,

23、 char *comment) slnodetype *p ;p=la-next ;if(p) printf(n%sn , comment) ;while(p) printf(n%3d , p-data);p=p-next ;printf(n) ;3. 约瑟夫环问题问题描述设有N个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人以出列,如此下去,直到所有人都出列为此。试设计确定他们的出列次序序列的程序。基本要求 选择单向循环链表作为存储结构模拟整个过程,并依次输出列的各人的编号。实现提示 程序运行之后,首先要求用户指定初始报数的下限值,可以n=30,

24、此题循环链表可不设头节点,而且必须注意空表和非空表的界限。如 n=8, m=4 时,若从第一个人, 设每个人的编号依次为 1,2,3,开始报数,则得到的出列次序为4,8,5,2,1,3,7,6,如下图所示,内层数字表示人的编号 ,每个编号外层的数字代表人出列的序号。程序实现#include #include typedef struct node int num; struct node *next; linklist;linklist *creat(linklist *head,int n) /*使n个人围成一圈,并给每个人标识号数*/ linklist *s,*p; int i; s=(l

25、inklist * )malloc(sizeof(linklist); head=s; s-num=1; p=s; for(i=2;inum=i; p-next=s; p=s; p-next=head; return(head); /* creat */linklist * select(linklist *head, int m) linklist *p, *q; int t; p=head; t=1; q=p; /* q为p的前趋指针*/ p=p-next; do t=t+1 ; /*报一次数*/ if(t%m=0) printf(%4d, p-num); q-next=p-next; f

26、ree(p); p=q-next; else q=p; p=p-next; while(q!=p); head=p; printf(%4d,p-num); return (head); /* select */void main( ) int n,m; linklist *head=(linklist*)malloc(sizeof(linklist); printf(ninput the total number:n=); scanf(%d, &n); printf(ninput the number to call:m=); scanf(%d, &m); head=creat(head,n)

27、; head=select(head,m); printf(nthe last one is :%d, head-num); printf(n); /* main */思考题:编程实现两个循环单链表的合并。实验三 栈、队列的实现及应用一、实验目的1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际背景下灵活运用。2、掌握栈和队列的特点,即先进后出与先进先出的原则。3、掌握栈和队列的基本操作实现方法。二、实验内容1、实现栈的顺序存储#include #include# define MAXSIZE 100 typedef int ElemType;typedef struct ElemType dataMAXSIZE; int top;SeqStack; void In

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1