计算机软件课设报告.docx
《计算机软件课设报告.docx》由会员分享,可在线阅读,更多相关《计算机软件课设报告.docx(59页珍藏版)》请在冰豆网上搜索。
![计算机软件课设报告.docx](https://file1.bdocx.com/fileroot1/2022-11/21/b225925c-ab90-4f75-9132-37b5b3c21b8b/b225925c-ab90-4f75-9132-37b5b3c21b8b1.gif)
计算机软件课设报告
数据结构实验报告
030910337徐大生
(一)实验对象、目的和要求
1.合并顺序表
实现两个顺序表的合并,将共同拥有的元素只存其一。
2.顺序表
实现顺序表的定义、创建、插入和删除操作,将数据元素显示出来。
3.单链表
实现单链表的定义、创建、插入和删除操作,将数据元素显示出来。
4.顺序栈
实现顺序栈的定义、创建、插入和删除操作,将数据元素显示出来。
5.链栈
实现链栈的定义、创建、插入和删除操作,将数据元素显示出来。
6.顺序队
实现顺序队的定义、创建、插入和删除操作,将数据元素显示出来。
7.链队
实现链队的定义、创建、插入和删除操作,将数据元素显示出来。
8.二叉树
二叉树的链式存储结构的数据结构定义、创建、先序/中序/后序遍历,并将结果序列输出。
9.图
图的邻接表和邻接矩阵数据结构的定义、创建;图的深度优先遍历、广度优先遍历。
10.查找
顺序查找、二分查找。
11.排序
插入排序、选择排序、冒泡排序。
12.通讯录的制作
12.1通讯录设计目的:
运用〈数据结构〉中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。
以把所学数据结构知识应用到实际软件开发中去。
通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
12.2通讯录设计内容:
本系统应完成以下几方面的功能:
①输入信息(Enter()):
调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取
②显示信息(Display()):
用以显示输入的数据,包括从内存中读出和从磁盘中读出
③查找(Search()):
以姓名作为关键字查找要找的信息
④删除信息(Delete()):
用以删除选定的输入信息(姓名作为关键字)
⑤存盘(Save()):
调用此函数将内存中的数据保存至磁盘中
⑥装入(Load()):
调用此函数用以将之前保存在磁盘的内容读入到内存中或显示到屏幕上
注:
本课题中输入的数据应包括以下几项信息:
姓名(NAME)学校(SCHOOL)城市(CITY)邮编(EIP)国家(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
#defineSeqListstructlisttype
#defineMaxSize1000
SeqList
{
intdata[MaxSize];
intlast;
};
voidmerge(SeqList*p,SeqList*q,SeqList*c)
{
inti,j,k,a;
i=0;j=0;k=0;
while(i<=p->last)
{
c->data[k]=p->data[i];
k++;i++;
}
while(j<=q->last)
{
i=0;
while(i<=p->last&&p->data[i]!
=q->data[j])
i++;
if(i>p->last)
{
c->data[k]=q->data[j];
k++;
}
j++;
}
for(a=0;aprintf("%d",c->data[a]);
}
SeqList*init_SeqList()
{
SeqList*p;
p=(SeqList*)malloc(sizeof(SeqList));
p->last=-1;
returnp;
}
voidmain()
{
SeqList*p;
p=init_SeqList();
inti,j;
i=0;
j=0;
printf("PleaseinputSeqListp:
\n");
scanf("%d",&p->data[i]);
while(p->data[i]!
=-1)
{
i++;
scanf("%d",&p->data[i]);
p->last++;
}
SeqList*q;
q=init_SeqList();
printf("PleaseinputSeqListq:
\n");
scanf("%d",&q->data[j]);
while(q->data[j]!
=-1)
{
j++;
scanf("%d",&q->data[j]);
q->last++;
}
SeqList*c;
c=init_SeqList();
merge(p,q,c);
}
2.顺序表
#include
#include
#defineseqliststructlisttype
#definemaxsize1000
seqlist
{
intdata[maxsize];
intlast;
};
seqlist*init_seqlist()//初始化
{
seqlist*L;
L=(seqlist*)malloc(sizeof(seqlist));
L->last=-1;
returnL;
}
intinsert_seqlist(seqlist*L,inti,intx)//插入
{
intj;
if(L->last==maxsize-1)
{
printf("Theseqlistisfull.\n");
return-1;
}
if(i==L->last+1)
L->data[L->last+1]=x;
else
{
for(j=L->last;j>=i;j--)
L->data[j+1]=L->data[j];
L->data[i]=x;
}
L->last++;
return1;
}
intDelete_seqlist(seqlist*L,intb)//删除
{
intj;
if(b<0||b>L->last)
{
printf("bisinvalid!
\n");
return(0);
}
for(j=b;j<=L->last-1;j++)
L->data[j]=L->data[j+1];
L->last--;
return
(1);
}
voidmain()
{
seqlist*L;
L=init_seqlist();
inti,j,a,x,p,b;
i=0;
j=0;
printf("PleaseinputSeqListL:
\n");
scanf("%d",&p);
while(p!
=-1)//出现-1时结束创建顺序表
{
L->data[i]=p;
i++;
L->last++;
scanf("%d",&p);
}
printf("pleaseinputthenumbertoinsert:
a=;x=.\n");
scanf("%d",&a);
scanf("%d",&x);
if(insert_seqlist(L,a,x))
{
printf("Theseqlistafterinsertis:
\n");
for(i=0;i<=L->last;i++)
printf("%d\n",L->data[i]);
}
printf("pleaseinputthenumbertodelete:
b=\n");
scanf("%d",&b);
if(Delete_seqlist(L,b))
{
printf("Theseqlistafterdeletionis:
\n");
for(i=0;i<=L->last;i++)
printf("%d\n",L->data[i]);
}
}
3.单链表
#include
#include
#defineNULL0
#defineSLNODEstructnode
SLNODE
{
intdata;
SLNODE*next;
};
intDel_LinkList(SLNODE*h,inti)
{
SLNODE*p,*s;
intj;
p=h;
j=0;
while(p->next!
=NULL&&j{
p=p->next;
j++;
}
if(j!
=i-1)
{
printf("iisinvalid!
\n");
return0;
}
else
{
if(p->next==NULL)
{
printf("idoesnotexist!
\n");
return(0);
}
else
{
s=p->next;
p->next=s->next;
free(s);
return
(1);
}
}
}
SLNODE*CREATE_SL(SLNODE*h)
{
SLNODE*p,*s;
intx;
h=(SLNODE*)malloc(sizeof(SLNODE));
p=h;
h->next=NULL;
printf("pleaseinputelement:
\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;
returnh;
}
voidmain()
{
SLNODE*h,*p;
inti;
h=CREATE_SL(h);
printf("Theoriginallinklistis:
\n");
for(p=h->next;p!
=NULL;p=p->next)
printf("%d\n",p->data);
printf("pleaseinputthenumderitodelet:
i=\n");
scanf("%d",&i);
if(Del_LinkList(h,i))
{
printf("Thelinklistaferdeletionis:
\n");
for(p=h->next;p!
=NULL;p=p->next)
printf("%d\n",p->data);
}
}
4.顺序栈
#include
#include
#definemaxsize1024
typedefstructstack
{
intdata[maxsize];
inttop;
}sqstack;
sqstack*init_seqstack()
{
sqstack*s;
s=(sqstack*)malloc(sizeof(sqstack));
s->top=-1;
returns;
}
intPop_seqstack(sqstack*s,intx)
{
if(s->top==-1)
return0;
else
{
x=s->data[s->top];
s->top--;
return1;
}
}
intTop_seqstack(sqstack*s)
{
if(s->top==-1)
return0;
else
return(s->data[s->top]);
}
intPush_seqstack(sqstack*s,intx)
{
if(s->top==maxsize-1)
return0;
else
{
s->top++;
s->data[s->top]=x;
return
(1);
}
}
voidmain()
{
inta;
intb;
sqstack*s;
s=init_seqstack();
printf("pleaseinputtheelementofseqstacks:
a=\n");
scanf("%d",&a);
while(a!
=-1)
{
if(Push_seqstack(s,a))
scanf("%d",&a);
}
printf("Thetopelementafterpushis:
\n");
printf("%d\n",Top_seqstack(s));
if(Pop_seqstack(s,b))
{
printf("Thetopelementafterpopis:
\n");
printf("%d\n",Top_seqstack(s));
}
}
5.链栈
#include
#include
#defineLinkstackstructlinkstack
#defineNULL0
intb;
Linkstack
{
intdata;
Linkstack*next;
};
Linkstack*init_Linkstack()
{
Linkstack*top;
top=(Linkstack*)malloc(sizeof(Linkstack));
top=NULL;
returntop;
}
Linkstack*Push_Linkstack(Linkstack*top,intx)
{
Linkstack*s;
s=(Linkstack*)malloc(sizeof(Linkstack));
s->data=x;
s->next=top;
top=s;
returntop;
}
Linkstack*Pop_Linkstack(Linkstack*top)
{
Linkstack*p;
if(top==NULL)
returnNULL;
else
{
b=top->data;
p=top;
top=top->next;
free(p);
returntop;
}
}
voidmain()
{
Linkstack*top,*q;
inta;
top=init_Linkstack();
printf("pleaseinputtheelementofthelinkstack:
a=\n");
scanf("%d",&a);
while(a!
=-1)
{
top=Push_Linkstack(top,a);
scanf("%d",&a);
}
q=top;
printf("theoriginallinkstackis:
\n");
while(q!
=NULL)
{
printf("%d\n",q->data);
q=q->next;
}
top=Pop_Linkstack(top);
printf("thetopofthelinkstackis:
%d\n",b);
printf("thelinkstackafterpopis:
\n");
q=top;
while(q!
=NULL)
{
printf("%d\n",q->data);
q=q->next;
}
}
6.顺序队
#include
#include
#defineMaxSize1024
typedefstructc_queue
{
intdata[MaxSize];
intfront,rear;
intnum;
}c_SeQueue;
c_SeQueue*init_SeQueue()
{
c_SeQueue*q;
q=(c_SeQueue*)malloc(sizeof(c_SeQueue));
q->front=q->rear=MaxSize-1;
q->num=0;
returnq;
}
intin_SeQueue(c_SeQueue*q,intx)
{
if(q->num==MaxSize)
{
printf("TheQueueisfull!
\n");
return(-1);
}
else
{
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=x;
q->num++;
return1;
}
}
intout_SeQueue(c_SeQueue*q)
{
if(q->num==0)
{
printf("TheQueueisempty!
\n");
return-1;
}
else
{
q->front=(q->front+1)%MaxSize;
printf("Theelementtooutis:
%d\n",q->data[q->front]);
q->num--;
return
(1);
}
}
voidmain()
{
c_SeQueue*q;
ints;
inti,a;
q=init_SeQueue();
printf("Pleaseinputthenumbertoin_SeQueue:
\n");
scanf("%d",&a);
while(a!
=-1)
{
if(in_SeQueue(q,a))
scanf("%d",&a);
}
printf("TheoriginalSeQueueis:
\n");
s=q->front+1;
for(i=0;inum;i++)
printf("%d\t",q->data[(s++)%MaxSize]);
printf("\n");
if(out_SeQueue(q))
printf("TheSeQueueafterout_Sequeueis:
\n");
s=q->front+1;
for(i=0;inum;i++)
printf("%d\t",q->data[(s++)%MaxSize]);
printf("\n");
}
7.链队
#include
#include
#defineNULL0
#defineQNODEstructQNode
intx;
QNODE
{
intdata;
QNODE*next;
};
typedefstructlinkqueue
{
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;
returnq;
}
voidin_LQueue(LinkQueue*q,intx)
{
QNODE*p;
p=(QNODE*)malloc(sizeof(QNODE));
p->data=x;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
intIsEmpty(LinkQueue*q)
{
if(q->front==q->rear)
return1;
else
return0;
}
intout_LQueue(LinkQueue*q)
{
QNODE*p;
if(IsEmpty(q))
{
printf("thequeueisempty!
");
return(0);
}
else
{
p=q->front->next;
q->front->next=p->next;
x=p->data;
free(p);
if(q->front->next==NULL)
q->rear=q->front;
return1;
}
}
voidmain()
{
LinkQueue*q;
QNODE*s;
q=init_LQueue();
inta;
printf("Pleaseinputlinklistq:
\n");
scanf("%d",&a);
while(a!
=-1)
{
in_LQueue(q,a);
scanf("%d",&a);
}
printf("Theoriginallinkqueueis:
\n");
s=q->front->next;
while(s!
=q->rear->next)
{
printf("%d\t",s->data);
s=s->next;
}
printf("\n");
if(out_LQueue(q))
{
printf("Theoutedelementis:
%d\n",x);
printf("Thelinkqueueafteroutqueueis:
\n");
s=q->front->next;
while(s!
=q->rear->next)
{
printf("%d\t",s->data);
s=s->next;
}
printf("\n");
}
}
8.二叉树
#include