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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验指导书.docx

1、数据结构实验指导书数据结构实验指导书实验一、线性表(2学时)1.设计实验设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求:(1)从键盘输入10个整数,产生顺序表,并输入结点值。(2)从键盘输入1个整数,在顺序表中查找该结点的位置11。若找到,输出结点的位置;若找不到,则显示“找不到”。(3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。(4)从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。2.实验报告完成实验一实验报告。格式统一按“实验报告格式”,注意内

2、容部分有页眉页脚。报告中实验原理部分需包括程序设计的基本思想,原理;实验过程部分需包括源程序及注释和调试、运行程序过程中产生的问题及采取的措施;实验结果部分需包括运行输出结果及对算法的程序的讨论、分析,改进设想,其它经验教训。另还可就实验方式、组织、设备、题目提出意见和建议。提示:可参考以下思路进行设计:#include #include /顺序表的定义:#define ListSize 100 /表空间大小可根据实际需要而定,这里假设为100typedef int DataType; /DataType可以是任何相应的数据类型如int, float或chartypedef struct Da

3、taType dataListSize; /向量data用于存放表结点 int length; /当前的表长度SeqList;void main() SeqList L; int i,x; int n=10; /欲建立的顺序表长度 L.length=0; void CreateList(SeqList *L,int n); void PrintList(SeqList L,int n); int LocateList(SeqList L,DataType x); void InsertList(SeqList *L,DataType x,int i); void DeleteList(SeqL

4、ist *L,int i); CreateList(&L,n); /建立顺序表 PrintList(L,n); /打印顺序表 printf(输入要查找的值:); scanf(%d,&x); i=LocateList(L,x); /顺序表查找 printf(输入要插入的位置:); scanf(%d,&i); printf(输入要插入的元素:); scanf(%d,&x); InsertList(&L,x,i); /顺序表插入 PrintList(L,n); /打印顺序表 printf(输入要删除的位置:); scanf(%d,&i); DeleteList(&L,i); /顺序表删除 Print

5、List(L,n); /打印顺序表/顺序表的建立:void CreateList(SeqList *L,int n) /在此插入必要的语句/顺序表的打印:void PrintList(SeqList L,int n) /在此插入必要的语句/顺序表的查找:int LocateList(SeqList L,DataType x) /在此插入必要的语句/顺序表的插入:void InsertList(SeqList *L,DataType x,int i) /在此插入必要的语句/顺序表的删除:void DeleteList(SeqList *L,int i) /在此插入必要的语句实验二、单链表(2学时

6、)1.验证实验打开教材自带教学辅助光盘,进入光盘中的“DSDemoC”目录,运行DSDemo.EXE,进入数据结构算法演示系统(C语言描述)V3.1C中文版。具体操作请按照界面上的提示进行。选择主菜单中链表下的各算法。首先仔细阅读算法,再输入数据,分步运行算法,检验自己对算法的理解是否正确。在实验报告中写出自己在演示算法过程中理解和实际运算的不同之处,并总结原因。2.设计实验设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:(1)从键盘输入20个整数,产生不带表头的单链表,并输入结点值。(2)从键盘输入1个整数,在单链表中查找该结点的位置。若找到,则显示“找到了”

7、;否则,则显示“找不到”。(3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。(4)从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。(5)将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。(6)删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。(7)把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。(8)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表

8、中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。3.实验报告完成实验二实验报告。要求同实验一。提示:可参考以下思路进行设计:#include #include /单链表的定义:typedef int DataType; /DataType可以是任何相应的数据类型如int, float或chartypedef struct node /结点类型定义 DataType data; /结点的数据域 struct node *next; /结点的指针域ListNode;typedef ListNode *LinkList;void main() int

9、i; DataType key,x; LinkList head; ListNode *p; LinkList CreateList(void); void PrintList(LinkList head); LinkList LocateNode(LinkList head,DataType key); LinkList GetNode(LinkList head,int i); void InsertList(LinkList head,DataType x,int i); void DeleteList(LinkList head,int i); void DeleteManyList(

10、LinkList head); void DeleteEvenList(LinkList head); void ChangeCircList(LinkList head); void PrintCircList(LinkList head); head=CreateList(); /建立单链表 PrintList(head); /打印单链表 printf(输入要查找的值:); scanf(%d,&key); p=LocateNode(head,key); /单链表查找 printf(请输入欲插入元素的位置:); scanf(%d,&i); printf(请输入欲插入的元素:); scanf(

11、%d,&x); InsertList(head,x,i); /单链表插入 PrintList(head); /打印单链表 printf(请输入欲删除结点的位置:); scanf(%d,&i); DeleteList(head,i); /单链表删除 PrintList(head); /打印单链表 DeleteManyList(head); /删除重复值 PrintList(head); /打印单链表 DeleteEvenList(head); /删除偶数值 PrintList(head); /打印单链表 ChangeCircList(head); /修改为循环单链表 PrintCircList(

12、head); /打印循环单链表 /*void DivideList(LinkList head,LinkList *A,LinkList *B); /分割成两个单链表 DivideList(head, &A, &B); PrintList(A); PrintList(B); */单链表的建立:LinkList CreateList(void) /在此插入必要的语句/单链表的打印:void PrintList(LinkList head) /在此插入必要的语句/单链表的查找1:LinkList LocateNode(LinkList head,DataType key) /在此插入必要的语句/单

13、链表的查找2:LinkList GetNode(LinkList head,int i) /在此插入必要的语句/单链表的插入:void InsertList(LinkList head,DataType x,int i) /在此插入必要的语句/单链表的删除:void DeleteList(LinkList head,int i) /在此插入必要的语句/删除单链表中重复值:void DeleteManyList(LinkList head) /在此插入必要的语句/删除单链表中偶数值:void DeleteEvenList(LinkList head) /在此插入必要的语句/修改为循环单链表:vo

14、id ChangeCircList(LinkList head) /在此插入必要的语句/循环单链表的打印:void PrintCircList(LinkList head) /在此插入必要的语句/*/分割成两个单链表void DivideList(LinkList head,LinkList *A,LinkList *B); /在此插入必要的语句*/实验三、栈和队列(4学时)1. 验证实验打开教材自带教学辅助光盘,进入光盘中的“DSDemoC”目录,运行DSDemo.EXE,进入数据结构算法演示系统(C语言描述)V3.1C中文版。具体操作请按照界面上的提示进行。分别选择主菜单中栈子菜单下的前三

15、个算法和队列子菜单下的各算法。首先仔细阅读算法,再输入数据,分步运行算法,检验自己对算法的理解是否正确。在实验报告中写出自己在演示算法过程中理解和实际运算的不同之处,并总结原因。2. 应用实验阅读所给的源程序,在实验报告中写出算法的功能和运行结果。程序如下:#define MAXNUM 100/* 栈中最大元素个数 */#define N 11 /*地图的第一维长度*/#include #include typedef struct int x;/* 行下标 */ int y;/* 列下标 */ int d;/* 运动方向 */ DataType;struct SeqStack /* 顺序栈类

16、型定义 */ int t; /* 指示栈顶位置 */ DataType sMAXNUM;typedef struct SeqStack *PSeqStack; /* 顺序栈类型的指针类型 */PSeqStack pastack; /* pastack是指向顺序栈的一个指针变量 */PSeqStack createEmptyStack_seq( void ) PSeqStack pastack; pastack = (PSeqStack)malloc(sizeof(struct SeqStack); if (pastack = NULL) printf(Out of space! n); els

17、e pastack-t = -1; return pastack;int isEmptyStack_seq( PSeqStack pastack ) return pastack-t = -1;/* 在栈中压入一元素x */void push_seq( PSeqStack pastack, DataType x ) if( pastack-t = MAXNUM - 1 ) printf( Overflow! n ); else pastack-t+; pastack-spastack-t = x; /* 删除栈顶元素 */void pop_seq( PSeqStack pastack ) if

18、 (pastack-t = -1 ) printf( Underflow!n ); else pastack-t-;/* 当pastack所指的栈不为空栈时,求栈顶元素的值 */DataType top_seq( PSeqStack pastack ) return (pastack-spastack-t);void pushtostack(PSeqStack st, int x, int y, int d) DataType element; element.x = x; element.y = y; element.d = d; push_seq(st, element);void pri

19、ntpath(PSeqStack st) DataType element; printf(The revers path is:n); /* 打印路径上的每一点 */ while(!isEmptyStack_seq(st) element = top_seq(st); pop_seq(st); printf(the node is: %d %d n, element.x, element.y); /* 迷宫mazeMN中求从入口mazex1y1到出口mazex2y2的一条路径 */* 其中 1=x1,x2=M-2 , 1=y1,y2=N-2 */void mazePath(int mazeN

20、, int direction2, int x1, int y1, int x2, int y2) int i, j, k, g, h; PSeqStack st; DataType element; st = createEmptyStack_seq( ); mazex1y1 = 2; /* 从入口开始进入,作标记 */ pushtostack(st, x1, y1, -1); /* 入口点进栈 */ while ( !isEmptyStack_seq(st) /* 走不通时,一步步回退 */ element = top_seq(st); pop_seq(st); i = element.x

21、; j = element.y; for (k = element.d + 1; k base=(Car *)malloc(STACK_INIT_SIZE*sizeof(Car); if(!(S-base) return ERROR; S-top=S-base; S-stacksize=STACK_INIT_SIZE; return OK;int StackEmpty(SqStack S) if(S.top=S.base) return OK; else return ERROR;int StackFull(SqStack S) if(S.top-S.base=STACK_INIT_SIZE)

22、 return OK; else return ERROR;int Push(SqStack *S,Car e) if(S-top-S-base=STACK_INIT_SIZE) return OVERFLOW; else *(S-top+)=e; return OK; int Pop(SqStack *S,Car *e) if(S-top=S-base) return ERROR; *e=*(-(S-top);typedef struct Car2 *top2; Car2 *base2; int stacksize2;SqStack2;int InitStack2(SqStack2 *S2)

23、 S2-base2=(Car2 *)malloc(STACK_INIT_SIZE*sizeof(Car2); if(!(S2-top2) return ERROR; S2-top2=S2-base2; S2-stacksize2=STACK_INIT_SIZE; return OK;int Push2(SqStack2 *S2,Car2 e2) if(S2-top2-S2-base2=STACK_INIT_SIZE) return OVERFLOW; *(S2-top2+)=e2; return OK;int Pop2(SqStack2 *S2,Car2 *e2) if(S2-top2=S2-

24、base2) exit(OVERFLOW); *e2=*(-(S2-top2); return OK;int StackEmpty2(SqStack2 S2) if(S2.top2=S2.base2) return OK; else return ERROR;typedef struct QNode Car data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front; QueuePtr rear;LinkQueue;int InitQueue(LinkQueue *Q) Q-front=Q-rear=(Queue

25、Ptr)malloc(sizeof(QNode); if(!(Q-front) return ERROR; Q-front-next=NULL; return OK;int EnQueue(LinkQueue *Q,Car e) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p) return ERROR; p-data=e; p-next=NULL; Q-rear-next=p; Q-rear=p; return OK;int QueueEmpty(LinkQueue Q) if(Q.front=Q.rear) return OK; else return ERROR;int DeQueue(LinkQueue *Q,Car *e) QueuePtr p; if(Q-front=Q-rear) return ERROR; p=Q-front-next; *e=p-data; Q-front-next=p-next; if(Q-rear=p

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

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