《信息管理与信息系统专业数据结构实验报告》由会员分享,可在线阅读,更多相关《信息管理与信息系统专业数据结构实验报告(23页珍藏版)》请在金锄头文库上搜索。
1、 实验一 线性表题目:线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、归并等)。程序清单:#include#define listinitsize 20#define listincrement 10typedef struct int *elem; int length; int listsize; sqlist;main() void initlist(sqlist *L); void add(sqlist *La,sqlist *Lb,sqlist *Lc); sqlist *La,*Lb,*Lc; int i,p,num;initlist(La);initlist(
2、Lb);initlist(Lc);printf(please input the numbers of you want about La:n);scanf(%d,&num);printf(n);for(i=0;ielemi=p; La-length+; printf(please input the numbers of you want about Lb:n);scanf(%d,&num);printf(n); for(i=0;ielemi=p; Lb-length+; printf(nnnnthe list of La:n);for(i=0;ilength;i+) printf(%6d,
3、La-elemi); printf(nnnnthe list of La:n);for(i=0;ilength;i+) printf(%6d,Lb-elemi); printf(nnn);add(La,Lb,Lc);printf(nnnthe list of Lc:n);for(i=0;ilength+Lb-length;i+) printf(%6d,Lc-elemi); getch();void add(sqlist *La,sqlist *Lb,sqlist *Lc) int *pa,*pb,*pc,*pa_last,*pb_last; pa=La-elem; pb=Lb-elem; Lc
4、-listsize=Lc-length=La-length+Lb-length; pc=Lc-elem=(int*)malloc(Lc-listsize)*sizeof(int); pa_last=La-elem+(La-length-1); pb_last=Lb-elem+(Lb-length-1); while(pa=pa_last&pb=pb_last) if(*pa_last*pb_last) *pc+=*pb_last-; else *pc=*pa_last; pc+; pa_last-; pb_last-; while(pa=pa_last) *pc=*pa_last-; whil
5、e(pbelem=(int*)malloc(listinitsize*sizeof(int); L-length=0; L-listsize=listinitsize; 调试报告:1、 调试中遇到的问题及解决方法调试程序时,因为没有注意到指针变量与普通变量对成员的引用所用符号不同,将指针变量引用所用符号写成.,导致程序出现大量错误,耽误了大量的调试时间。警告 shunxu1.c 18: 可能在La定义以前使用了它在 main 函数中,将La放在main前即可消除警告。注意定义各线性表变量为指针变量,这样可以返回函数。二、测试结果1、键入数值2、输出结果3、 键入任意字符,退出演示界面,回到编辑
6、状态。3、 经验及体会1. 程序采用逐个输入的方法创建La,Lb,在元素较多时,会使得程序很庞大,不利于检查错误等。2. 本次实验采用数据抽象的程序设计方法,将程序化为三层次结构,设计时思路清晰,使调试也较顺利,各模块有较好的可重用性。3. 进入演示程序后,按规定输入数值后便可看到结果,按任意键退出。实验二 栈和队列题目:栈的基本操作的实现(初始化、赋值、取值、插入、删除等) 【基本要求】 要求分别采用顺序和链式存储结构。 程序清单:#include #include #include # define STACK_INIT_SIZE 100# define STACKINCREMENT 10
7、# define OK 1# define ERROR 0#define OVERFLOW 0typedef int SElemType;/定义SElemType为int类型/栈类型定义typedef struct SqStack SElemType *base; SElemType *top; int stacksize;SqStack;char aSTACK_INIT_SIZE+STACKINCREMENT;/设计相关函数声明:int IsReverse(SqStack &s);/判断是否是回文int InitStack(SqStack &s );/栈初始化int Push(SqStack
8、 &s, char e );/进栈int Pop(SqStack &s,char &e);/出栈int StackEmpty(SqStack &s);/判断是否为空栈int i=0;/栈的长度void main()SqStack q;InitStack(q);char m;coutm & m!=)Push(q,m);ai=m;i+;if (StackEmpty(q)=0)cout此为空栈!endl;exit(0);int flag;flag=IsReverse(q);if(flag=0) couta不是回文endl;else couta是回文=s.stacksize)s.base=(SElem
9、Type*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!s.base) exit(OVERFLOW); /储存分配失败s.top=s.base+s.stacksize;/s.stacksize+=STACKINCREMENT;*s.top+=e;return OK;int Pop(SqStack &s,char &e)/出栈if(s.top=s.base) return ERROR;e=*-s.top;return OK;int StackEmpty(SqStack &s)/判断是否为空栈if(s.top=
10、s.base) return ERROR;else return OK;int IsReverse(SqStack &s)int j;char b; for(j=0;ji;j+)/注意循环到栈底时Pop(s,b);/出栈,将元素赋值与b;if(b!=aj) return 0;return 1;/*int IsReverse(SqStack &s)int j;char b; for(j=0;js.stacksize;j+)/注意循环到栈底时if(Pop(s,b)=0) break;/当栈空时,退出循环if(b!=aj) return 0;return 1;*/调试报告:一、运行及调试记录2、 经
11、验及体会1.在做表达式的计算的时候一定要注意何时入栈何时出栈。如果如栈与出栈的情况判断不清楚就无法得出答案。2.分号的忘记那还是很经常的,要加强注意。3.编程,本来就是一件不容易的事情,需要我们不断的锻炼,不断的学习,熟能生巧,我们只有大量的练习,好好的编程,只有这样,才能提高我们的编程能力。实验三 二叉树及其应用题目:二叉树的建立与遍历 【问题描述】建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。 【基本要求】 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。程序清单:#include #include