数据结构实验源代码.doc

上传人:pu****.1 文档编号:551658111 上传时间:2023-08-14 格式:DOC 页数:36 大小:163KB
返回 下载 相关 举报
数据结构实验源代码.doc_第1页
第1页 / 共36页
数据结构实验源代码.doc_第2页
第2页 / 共36页
数据结构实验源代码.doc_第3页
第3页 / 共36页
数据结构实验源代码.doc_第4页
第4页 / 共36页
数据结构实验源代码.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《数据结构实验源代码.doc》由会员分享,可在线阅读,更多相关《数据结构实验源代码.doc(36页珍藏版)》请在金锄头文库上搜索。

1、第2章#include#includetypedef struct data /定义一个结构体data int num; /用于存放人的序号 int val; /用于存放密码typedata;typedef struct node /定义一个结构体(结点),其中包含一个数据域和一个指针域 typedata data; /结构体的嵌套 struct node *next;listnode;typedef listnode *linklist;linklist head;int main(void)/ 进入主函数 int n,i,b,m,j; linklist head=(listnode *)m

2、alloc(sizeof(listnode); /申请一个空间(头结点 head) listnode *p,*q; /定义两个可以指向结点的指针 printf(输入总人数:); scanf(%d,&n); q=head; /用指针q指向头结点 for(j=1;jnext=(listnode *)malloc(sizeof(listnode); /将头结点的next域指向刚生成的一个结点 q=q-next; q-data.val=b; /输入密码 q-data.num=j; /输入序号 q-next=head-next; /将尾结点的next域指向第一个结点,构成循环链表 printf(请输入一

3、个数m:); scanf(%d,&m); if(mnext; i+; p=q-next; /p指向输出结点 q-next=p-next; /将输出结点的前结点的next域指向输出结点的后结点 printf(num:%dtval:%dn,p-data.num,p-data.val); /输出 m=p-data.val; /取得输出结点的密码 free(p); while(q-next!=q); /只剩最后一个结点时结束 printf(num:%dtval:%dn,q-data.num,q-data.val); /输出最后一个结点 free(q); /释放最后一个结点 free(head); /释

4、放头结点 system(pause);第3章(1)#include#include#include#define M 4#define N 6#define MaxSize 100using namespace std;int mgM+2N+2=1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,;struct int i,j,di;StackMaxSize,PathMaxSize;int top=-1;int count=1;int minlen=Max

5、Size;void Print()for(int i = 0;i M+2;i+)for(int j = 0;j N+2;j+)if(mgij) cout1 ;else cout0 ;cout-1) i=Stacktop.i;j=Stacktop.j;di=Stacktop.di;if(i=M&j=N) coutcount+endl; for(k=0;k=top;k+) cout(Stackk.i,Stackk.j) ; if(k+1)%5=0)coutn; coutn; if(top+1minlen) for(k=0;k=top;k+) Pathk=Stackk; minlen=top+1;

6、mgStacktop.iStacktop.j=0; top-; i=Stacktop.i; j=Stacktop.j; di=Stacktop.di;find=0;while(di4&find=0) di+; switch(di) case 1:i=Stacktop.i;j=Stacktop.j+1;break; case 2:i=Stacktop.i+1;j=Stacktop.j;break; if(mgij=0) find=1;if(find=1) Stacktop.di=di; top+; Stacktop.i=i; Stacktop.j=j; Stacktop.di=-1; mgij=

7、-1;else mgStacktop.iStacktop.j=0; top-; cout最短路径如下:n; cout长度:minlenendl; cout路径:; for(k=0;kminlen;k+) cout(Pathk.i,Pathk.j) ;if(k+1)%5=0) coutn; coutn;int main() cout迷宫地图如下n; Print(); cout迷宫所有路径如下:n; mgpath(); getch();(2)#include#include#include #include #include #define LEN sizeof(STACK) typedef st

8、ruct node int data; struct node *link;STACK50,*STLink;STLink top50; void init(STLink top,int m) /*初始化堆栈*/ topm=NULL; int empty( STLink top,int n) /*判断是否为空*/ return (topn=NULL); int push(STLink top,int A,int m) /*入栈*/ STLink p; if(!(p=(STLink)malloc(LEN) return 0; else p-data=A; p-link=topm; topm=p;

9、return 1; int pop(STLink top,int m) /*出栈*/ int A; STLink p; p=topm; A=p-data; topm=topm-link; free(p); return A; int trainpush(int M,int A,STLink top) int m,k=0,l; topk=NULL; /* 初始化第一个堆栈 */ push(top,A0,0); /*把第一节车厢压入缓冲铁轨*/ printf(缓冲铁轨: 1 栈顶值:%dn,top0-data); for(m=1;mtopk-data) /*前面所有栈顶值最大值一定为最后一个栈的栈

10、顶值,如果此次需 进栈的车厢号比前面所有栈顶值都大重新建立一个新的栈并把车厢号压入新的栈的栈底*/init(top,+k); push(top,Am,k);printf(缓冲铁轨:%d 栈顶值:%dn,k+1,topk-data);else /* 将此次需进栈的车厢号与所有栈顶值比较,插入到第一次遇到的栈顶值比将要入栈的车厢号要大的栈中,比如要插入10号车厢,缓冲铁轨的栈顶值排列如下:2、11、5、12,13,将10插在11所在的栈的栈顶*/ l=0;while(ltopl-data)l+; elsepush(top,Am,l);printf(缓冲铁轨: %d 栈顶值:%dn,l+1,topl-data);l=k+1; return k+1; void trainpop(int M,int A,STLink top,int N) int m,n=0,min,l=0,amin=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号