数据结构课程设计文档格式.docx
- 文档编号:19507945
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:36
- 大小:117.91KB
数据结构课程设计文档格式.docx
《数据结构课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
5快速排序
以上为基本操作!
三、实现过程
#include<
stdio.h>
string.h>
//#include<
iostream.h>
stdlib.h>
math.h>
conio.h>
//usingnamespacestd;
#defineOK1
#defineTRUE1
#defineERROR0
#defineFALSE0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineMAXSTRLEN150
typedefintStatus;
typedefintElemType;
typedefintSElemType;
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*Linklist;
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
typedefstructQNode{
intdata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
char*ch;
intlength;
}HString;
typedefstruct
{
unsignedintweight;
unsignedintparent,lchild,rchild;
}HTNode,*HuffmanTree;
typedefchar**HuffmanCode;
typedefintKeyType;
#defineEQ(a,b)((a)==(b));
#defineLT(a,b)((a)<
(b));
KeyTypekey;
}EEElemType;
EEElemType*elem;
}SSTable;
}RedType;
RedTyper[11];
}SqList;
voidCreateList_L(Linklist&
L,intn);
StatusListInsert_L(Linklist&
L,inti,ElemTypee);
voiddisplay_L(Linklist&
L,inte);
StatusListDelete_L(Linklist&
voidSubmenu1()
charsub1[2];
LinklistL;
inti,e,n;
for(;
;
)
{
printf("
\n\t\t*************线性表*************\n\n"
);
\t\t*\t1:
创建链表\n\t\t*\t2:
插入元素\n\t\t*\t3:
查找元素\n\t\t*\t4:
删除元素\n\t\t*\t0:
返回\n"
\n\t\t********************************\n"
\t\t请选择:
"
scanf("
%s"
&
sub1);
if(sub1[1]=='
\0'
{
switch(sub1[0])
{
case'
1'
:
//添加功能函数
printf("
\n\tYouselectsub1-1!
\n"
请输入链表长度:
scanf("
%d"
n);
CreateList_L(L,n);
break;
2'
\n\tYouselectsub1-2!
请输入插入的位置:
scanf("
i);
printf("
请输入要插入的元素:
e);
ListInsert_L(L,i,e);
case'
3'
\n\tYouselectsub1-3!
请输入要查找的数据:
display_L(L,e);
//printf("
a);
4'
\n\tYouselectsub1-4!
请输入要删除第i个元素:
e=ListDelete_L(L,i,e);
e);
0'
system("
cls"
return;
default:
\n\n\t选择错误,请重新选择!
}
}
}
\n\tYouselectone!
\n\n"
\t\t按任意键继续..."
getchar();
system("
}
L,intn){//算法2.11
//逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L
Linklistp;
inti;
L=(Linklist)malloc(sizeof(LNode));
L->
next=NULL;
//先建立一个带头结点的单链表
for(i=n;
i>
0;
--i){
p=(Linklist)malloc(sizeof(LNode));
//生成新结点
输入数据"
p->
data);
p->
next=L->
next;
next=p;
//插入到表头
}//CreateList_L
L,inti,ElemTypee){//算法2.9
//在带头结点的单链线性表L的第i个元素之前插入元素e
Linklistp,s;
p=L;
structLNode*q;
q=L->
intj=0,a=0;
while(p&
&
j<
i-1){//寻找第i-1个结点
p=p->
++j;
}
if(!
p||j>
i-1)returnERROR;
//i小于1或者大于表长
s=(Linklist)malloc(sizeof(LNode));
s->
data=e;
next=p->
//插入L中
p->
next=s;
while(q->
next!
=NULL)
{
printf("
%d->
q->
q=q->
a++;
%d\n"
returnOK;
}//LinstInsert_L
L,inte)
{
inta;
q=L;
a=0;
if(q==NULL)
链表为空!
elseif(q->
next==NULL)
else
while(q->
}
L,inti,ElemTypee){//算法2.10
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
Linklistp,q;
while(p->
next&
i-1){//寻找第i个结点,并令p指向其前趋
(p->
next)||j>
//删除位置不合理
q=p->
next=q->
//删除并释放结点
e=q->
data;
free(q);
returne;
}//ListDelete_L
StatusInitStack(SqStack&
S){
//构造一个空栈S
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
S.base)exit(OVERFLOW);
//存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}//InitStack
intPush(SqStack&
S,inte){
if(S.top-S.base>
=S.stacksize){//栈满,追加存储空间
S.base=(SElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
*S.top++=e;
}//Push
intStackEmpty(SqStackS){
if((S.top-S.base)==0)returnTRUE;
else
returnFALSE;
}//StackEmpty
intPop(SqStack&
S,int&
e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;
否则返回ERROR
if(S.top==S.base)returnERROR;
e=*--S.top;
}//Pop
voidconversion(intNum){//
//对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数
SqStackS;
inte;
InitStack(S);
//构造空栈
Num);
while(Num){
Push(S,Num%8);
Num=Num/8;
while(!
StackEmpty(S)){
Pop(S,e);
printf("
e);
}//conversion
intInitQueue(LinkQueue&
Q)
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
Q.front)exit(0);
Q.front->
next=NULL;
return1;
intEnQueue(LinkQueue&
Q,inte)
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
p)exit(0);
data=e;
Q.rear->
next=p;
Q.rear=p;
intDeQueue(LinkQueue&
Q,int&
e)
if(Q.front==Q.rear)return0;
p=Q.front->
e=p->
next=p->
if(Q.rear==p)Q.rear=Q.front;
free(p);
voidSubmenu2()
charsub2[2];
intNum;
LinkQueueQ;
inteq,eqq;
\n\t\t*************栈与队列*************\n\n"
栈的应用之数制转换\n\t\t*\t2:
创建队列\n\t\t*\t3:
插入队列\n\t\t*\t4:
出队列\n\t\t*\t0:
sub2);
if(sub2[1]=='
switch(sub2[0])
请输入一个数字:
conversion(Num);
break;
InitQueue(Q);
创建队列成功!
请输入要插入元素:
eq);
EnQueue(Q,eq);
\n插入对列成功\n"
DeQueue(Q,eqq);
出列元素为:
eqq);
\n\tYouselecttwo!
voidStrAssign(HString&
T,char*chars)
inti,j;
char*c;
if(T.ch)free(T.ch);
for(i=0,c=chars;
*c!
='
;
++i,++c);
i)
T.ch=NULL;
T.length=0;
(T.ch=(char*)malloc(i*sizeof(char))))
exit(0);
for(j=0;
j<
i;
j++)
T.ch[j]=chars[j];
T.length=i;
return;
intStrLength(HStringS)
returnS.length;
intConcat(HString&
T,HStringS1,HStringS2)
(T.ch=(char*)malloc((S1.length+S2.length)*sizeof(char))))
exit(0);
for(i=0;
i<
S1.length;
i++)
T.ch[i]=S1.ch[i];
T.length=S1.length+S2.length;
for(j=0;
S2.length;
T.ch[S1.length+j]=S2.ch[j];
voidStrShow(HStringS)
for(inti=0;
S.length;
%c"
S.ch[i]);
intSubString(HString&
Sub,HStringS,intpos,intlen)
if(pos<
1||pos>
S.length||len<
0||len>
S.length-pos+1)
return0;
if(Sub.ch)free(Sub.ch);
len)
Sub.ch=NULL;
Sub.length=0;
Sub.ch=(char*)malloc(len*sizeof(char));
for(i=0;
len;
Sub.ch[i]=S.ch[pos+i-1];
Sub.length=len;
voidSubmenu3()
charsub3[2];
intn,pos,len;
HStringSS,SS1,SS2,SS3,SS12,Sub;
charstr[MAXSTRLEN],str1[MAXSTRLEN],str2[MAXSTRLEN],str3[MAXSTRLEN];
\n\t\t*************串*************\n\n"
求串长\n\t\t*\t2:
串联接\n\t\t*\t3:
求子串\n\t\t*\t0:
sub3);
if(sub3[1]=='
switch(sub3[0])
请输入字符串:
SS.ch=NULL;
str);
StrAssign(SS,str);
n=StrLength(SS);
长度为:
n);
请输入字符串str1:
str1);
SS1.ch=NULL;
StrAssign(SS1,str1);
请输入字符串str2:
SS2.ch=NULL;
str2);
StrAssign(SS2,str2);
SS12.ch=NULL;
Concat(SS12,SS1,SS2);
联接后的字符串为:
StrShow(SS12);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计