1、计算机软件课设报告数据结构实验报告030910337 徐大生(一) 实验对象、目的和要求1. 合并顺序表实现两个顺序表的合并,将共同拥有的元素只存其一。2. 顺序表实现顺序表的定义、创建、插入和删除操作,将数据元素显示出来。3. 单链表实现单链表的定义、创建、插入和删除操作,将数据元素显示出来。4. 顺序栈实现顺序栈的定义、创建、插入和删除操作,将数据元素显示出来。5. 链栈实现链栈的定义、创建、插入和删除操作,将数据元素显示出来。6. 顺序队实现顺序队的定义、创建、插入和删除操作,将数据元素显示出来。7. 链队实现链队的定义、创建、插入和删除操作,将数据元素显示出来。8. 二叉树二叉树的链式
2、存储结构的数据结构定义、创建、先序/中序/后序遍历,并将结果序列输出。9. 图图的邻接表和邻接矩阵数据结构的定义、创建;图的深度优先遍历、广度优先遍历。10. 查找顺序查找、二分查找。11. 排序插入排序、选择排序、冒泡排序。12. 通讯录的制作12.1通讯录设计目的:运用数据结构中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。12.2通讯录设计内
3、容:本系统应完成以下几方面的功能:输入信息(Enter()): 调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取显示信息(Display()):用以显示输入的数据,包括从内存中读出和从磁盘中读出查找(Search()):以姓名作为关键字查找要找的信息删除信息(Delete()):用以删除选定的输入信息(姓名作为关键字)存盘(Save()):调用此函数将内存中的数据保存至磁盘中装入(Load()):调用此函数用以将之前保存在磁盘的内容读入到内存中或显示到屏幕上注:本课题中输入的数据应包括以下几项信息:姓名(NAME )学校(SCHOOL)城市(CITY)邮编(EIP
4、)国家(STATE)(二) 程序流程图1. 顺序表合并2. 顺序表3. 链表4. 顺序栈5. 链栈6. 顺序队7. 链队8. 二叉树9. 图10. 查找10.1顺序查找10.2二分查找11. 排序11.1插入排序11.2选择排序11.3冒泡排序通讯录12. 链栈(三) 源程序清单1. 合并顺序表#include#include#include#define SeqList struct listtype#define MaxSize 1000SeqList int dataMaxSize; int last;void merge(SeqList *p,SeqList *q,SeqList *c
5、) int i,j,k,a; i=0;j=0;k=0; while(ilast) c-datak=p-datai; k+;i+; while(jlast) i=0; while(ilast&p-datai!=q-dataj) i+; if(ip-last) c-datak=q-dataj; k+; j+; for(a=0;adataa);SeqList *init_SeqList() SeqList *p; p=(SeqList*)malloc(sizeof(SeqList); p-last=-1; return p;void main() SeqList *p; p=init_SeqList
6、(); int i,j; i=0; j=0; printf(Please input SeqList p:n); scanf(%d,&p-datai); while(p-datai!=-1) i+; scanf(%d,&p-datai); p-last+; SeqList *q; q=init_SeqList(); printf(Please input SeqList q:n); scanf(%d,&q-dataj); while(q-dataj!=-1) j+; scanf(%d,&q-dataj); q-last+; SeqList *c; c=init_SeqList(); merge
7、(p,q,c);2. 顺序表#include#include#define seqlist struct listtype#define maxsize 1000seqlist int datamaxsize; int last;seqlist *init_seqlist() /初始化 seqlist *L; L=(seqlist*)malloc(sizeof(seqlist); L-last=-1; return L;int insert_seqlist(seqlist *L,int i,int x) /插入 int j; if(L-last=maxsize-1) printf(The se
8、qlist is full.n); return -1; if(i=L-last+1) L-dataL-last+1=x; else for(j=L-last;j=i;j-) L-dataj+1=L-dataj; L-datai=x; L-last+; return 1;int Delete_seqlist(seqlist *L,int b) /删除 int j; if(bL-last) printf(b is invalid!n); return(0); for(j=b;jlast-1;j+) L-dataj=L-dataj+1; L-last-; return(1);void main()
9、 seqlist *L; L=init_seqlist(); int i,j,a,x,p,b; i=0; j=0; printf(Please input SeqList L:n); scanf(%d,&p); while(p!=-1) /出现-1时结束创建顺序表 L-datai=p; i+; L-last+; scanf(%d,&p); printf(please input the number to insert:a= ;x= .n); scanf(%d,&a); scanf(%d,&x); if(insert_seqlist(L,a,x) printf(The seqlist afte
10、r insert is:n); for(i=0;ilast;i+) printf(%dn,L-datai); printf(please input the number to delete:b= n); scanf(%d,&b); if(Delete_seqlist(L,b) printf(The seqlist after deletion is:n); for(i=0;ilast;i+) printf(%dn,L-datai); 3. 单链表#include#include#define NULL 0#define SLNODE struct nodeSLNODE int data; S
11、LNODE *next;int Del_LinkList(SLNODE *h,int i) SLNODE *p,*s; int j; p=h; j=0; while(p-next!=NULL&jnext; j+; if(j!=i-1) printf(i is invalid!n); return 0; else if(p-next=NULL) printf(i does not exist!n); return(0); else s=p-next; p-next=s-next; free(s); return(1); SLNODE *CREATE_SL(SLNODE *h) SLNODE *p
12、,*s; int x; h=(SLNODE*)malloc(sizeof(SLNODE); p=h; h-next=NULL; printf(please input element:n); scanf(%d,&x); while(x!=-1) s=(SLNODE*)malloc(sizeof(SLNODE); s-data=x; if(h-next=NULL) h-next=s; else p-next=s; p=s; scanf(%d,&x); p-next=NULL; return h;void main() SLNODE *h,*p; int i; h=CREATE_SL(h); pr
13、intf(The original linklist is:n); for(p=h-next;p!=NULL;p=p-next) printf(%dn,p-data); printf(please input the numder i to delet:i=n); scanf(%d,&i); if(Del_LinkList(h,i) printf(The linklist afer deletion is:n); for(p=h-next;p!=NULL;p=p-next) printf(%dn,p-data); 4. 顺序栈#include#include#define maxsize 10
14、24typedef struct stack int datamaxsize; int top;sqstack;sqstack *init_seqstack() sqstack *s; s=(sqstack*)malloc(sizeof(sqstack); s-top=-1; return s;int Pop_seqstack(sqstack *s,int x) if(s-top=-1) return 0; else x=s-datas-top; s-top-; return 1; int Top_seqstack(sqstack *s) if(s-top=-1) return 0; else
15、 return(s-datas-top);int Push_seqstack(sqstack *s,int x) if(s-top=maxsize-1) return 0; else s-top+; s-datas-top=x; return(1); void main() int a; int b; sqstack *s; s=init_seqstack(); printf(please input the element of seqstack s:a= n); scanf(%d,&a); while(a!=-1) if(Push_seqstack(s,a) scanf(%d,&a); p
16、rintf(The top element after push is:n); printf(%dn,Top_seqstack(s); if(Pop_seqstack(s,b) printf(The top element after pop is:n); printf(%dn,Top_seqstack(s); 5. 链栈#include#include#define Linkstack struct linkstack#define NULL 0int b;Linkstack int data; Linkstack *next;Linkstack *init_Linkstack() Link
17、stack *top; top=(Linkstack*)malloc(sizeof(Linkstack); top=NULL; return top;Linkstack *Push_Linkstack(Linkstack *top,int x) Linkstack *s; s=(Linkstack*)malloc(sizeof(Linkstack); s-data=x; s-next=top; top=s; return top;Linkstack *Pop_Linkstack(Linkstack *top) Linkstack *p; if(top=NULL) return NULL; el
18、se b=top-data; p=top; top=top-next; free(p); return top; void main() Linkstack *top,*q; int a; top=init_Linkstack(); printf(please input the element of the linkstack:a=n); scanf(%d,&a); while(a!=-1) top=Push_Linkstack(top,a); scanf(%d,&a); q=top; printf(the original linkstack is:n); while(q!=NULL) p
19、rintf(%dn,q-data); q=q-next; top=Pop_Linkstack(top); printf(the top of the linkstack is: %dn,b); printf(the linkstack after pop is:n); q=top; while(q!=NULL) printf(%dn,q-data); q=q-next; 6. 顺序队#include#include#define MaxSize 1024typedef struct c_queue int dataMaxSize; int front,rear; int num;c_SeQue
20、ue;c_SeQueue *init_SeQueue() c_SeQueue *q; q=(c_SeQueue*)malloc(sizeof(c_SeQueue); q-front=q-rear=MaxSize-1; q-num=0; return q;int in_SeQueue(c_SeQueue *q,int x) if(q-num=MaxSize) printf(The Queue is full!n); return(-1); else q-rear=(q-rear+1)%MaxSize; q-dataq-rear=x; q-num+; return 1; int out_SeQue
21、ue(c_SeQueue *q) if(q-num=0) printf(The Queue is empty!n); return -1; else q-front=(q-front+1)%MaxSize; printf(The element to out is: %dn,q-dataq-front); q-num-; return(1); void main() c_SeQueue *q; int s; int i,a; q=init_SeQueue(); printf(Please input the number to in_SeQueue:n); scanf(%d,&a); whil
22、e(a!=-1) if(in_SeQueue(q,a) scanf(%d,&a); printf(The original SeQueue is:n); s=q-front+1; for(i=0;inum;i+) printf(%dt,q-data(s+)%MaxSize); printf(n); if(out_SeQueue(q) printf(The SeQueue after out_Sequeue is:n); s=q-front+1; for(i=0;inum;i+) printf(%dt,q-data(s+)%MaxSize); printf(n);7. 链队#include#in
23、clude#define NULL 0#define QNODE struct QNodeint x;QNODE int data; QNODE *next;typedef struct linkqueue QNODE *front,*rear;LinkQueue;LinkQueue *init_LQueue() LinkQueue *q; QNODE *p; q=(LinkQueue*)malloc(sizeof(LinkQueue); p=(QNODE*)malloc(sizeof(QNODE); p-next=NULL; q-front=q-rear=p; return q;void i
24、n_LQueue(LinkQueue *q,int x) QNODE *p; p=(QNODE*)malloc(sizeof(QNODE); p-data=x; p-next=NULL; q-rear-next=p; q-rear=p;int IsEmpty(LinkQueue *q) if(q-front=q-rear) return 1; else return 0;int out_LQueue(LinkQueue *q) QNODE *p; if(IsEmpty(q) printf(the queue is empty!); return(0); else p=q-front-next;
25、 q-front-next=p-next; x=p-data; free(p); if(q-front-next=NULL) q-rear=q-front; return 1; void main() LinkQueue *q; QNODE *s; q=init_LQueue(); int a; printf(Please input linklist q:n); scanf(%d,&a); while(a!=-1) in_LQueue(q,a); scanf(%d,&a); printf(The original linkqueue is:n); s=q-front-next; while(s!=q-rear-next) printf(%dt,s-data); s=s-next; printf(n); if(out_LQueue(q) printf(The outed element is :%dn,x); printf(The linkqueue after outqueue is:n); s=q-front-next; while(s!=q-rear-next) printf(%dt,s-data); s=s-next; printf(n); 8. 二叉树#include
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1