数据结构实验报告Word文件下载.docx
- 文档编号:21779465
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:49
- 大小:365.65KB
数据结构实验报告Word文件下载.docx
《数据结构实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word文件下载.docx(49页珍藏版)》请在冰豆网上搜索。
while(p->
link!
=NULL)
{printf("
%c"
p->
data);
printf("
%c\n"
intinsert_char(charX,charY)
r=(test*)malloc(m);
r->
data=X;
if(head->
data==Y)
{head=r;
link=p;
else{while((p->
data!
=Y)&
&
(p->
=NULL))
{q=p;
if(p->
data==Y){q->
link=r;
else{p->
L++;
return(0);
intdelet_char(charX)
data==X){head=head->
free(p);
=X)&
data==X)
{q->
link=p->
elsereturn(-1);
L--;
voidmain()
{L=26;
build();
display();
insertreturnvalue=%d\n"
insert_char('
L'
'
W'
));
deletereturnvalue=%d\n"
delet_char('
z'
2.创建一个链表。
#include"
stdlib.h"
stdio.h"
structlist
{intdata;
structlist*next;
};
typedefstructlistnode;
typedefnode*link;
#defineNULL0
{linkptr,head;
intnum,i;
ptr=(link)malloc(sizeof(node));
head=ptr;
pleaseinput5numbers==>
\n"
);
for(i=0;
=4;
{scanf("
%d"
&
num);
ptr->
data=num;
next=(link)malloc(sizeof(node));
if(i==4)ptr->
next=NULL;
elseptr=ptr->
next;
ptr=head;
while(ptr!
Thevalueis==>
%d\n"
ptr->
ptr=ptr->
3.反向
#include"
structlist*next;
typedefnode*link;
{linkptr,head,tail;
tail=(link)malloc(sizeof(node));
tail->
ptr=tail;
\npleaseinput5data==>
head=(link)malloc(sizeof(node));
head->
next=ptr;
}}
4.连接两个链表
{intdata;
linkdelete_node(linkpointer,linktmp)
{if(tmp==NULL)
returnpointer->
else
{if(tmp->
next->
next==NULL)
tmp->
else
next=tmp->
returnpointer;
voidselection_sort(linkpointer,intnum)
{linktmp,btmp;
inti,min;
num;
{
tmp=pointer;
min=tmp->
data;
btmp=NULL;
while(tmp->
next)
{if(min>
data)
{min=tmp->
btmp=tmp;
tmp=tmp->
\40:
%d\n"
min);
pointer=delete_node(pointer,btmp);
linkcreate_list(intarray[],intnum)
{linktmp1,tmp2,pointer;
inti;
pointer=(link)malloc(sizeof(node));
pointer->
data=array[0];
tmp1=pointer;
{tmp2=(link)malloc(sizeof(node));
tmp2->
data=array[i];
tmp1->
next=tmp2;
tmp1=tmp1->
voiddisplay(linkp)
next!
%d->
"
linkconcatenate(linkpointer1,linkpointer2)
{linktmp;
tmp=pointer1;
next=pointer2;
returnpointer1;
voidmain(void)
{intarr1[]={3,12,8,9,11};
intarr2[]={1,4,5,6,7};
linkptr,ptr1,ptr3;
ptr1=create_list(arr2,5);
display(ptr1);
ptr=create_list(arr1,5);
display(ptr);
ptr3=concatenate(ptr,ptr1);
display(ptr3);
实验二栈和队列的应用
【实验目的】:
掌握栈和队列的结构定义和特性;
掌握栈和队列的基本操作以及栈和队列在程序设计中的应用。
【实验题目】:
1、栈实现数制转换
conio.h>
typedefintSElemType;
#defineOK1
#defineOVERFLOW-1
#defineERROR0
#defineFALSE0
#defineTRUE1
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefintStatus;
structSTACK
SElemType*base;
SElemType*top;
intstacksize;
typedefstructSTACKSqStack;
typedefstructSTACK*pSqStack;
StatusStackEmpty(SqStackS)
if(S.top==S.base)returnTRUE;
else
returnFALSE;
StatusInitStack(SqStack**S)
(*S)=(SqStack*)malloc(sizeof(SqStack));
(*S)->
base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
(*S)->
base)exit(OVERFLOW);
top=(*S)->
base;
stacksize=STACK_INIT_SIZE;
returnOK;
StatusPush(SqStack*S,SElemTypee)
if(S->
top-S->
base>
=S->
stacksize)
{
S->
base=(SElemType*)realloc(S->
base,
(S->
stacksize+STACKINCREMENT)*sizeof(SElemType));
S->
top=S->
base+S->
stacksize;
stacksize+=STACKINCREMENT;
}
*(S->
top++)=e;
StatusPop(SqStack*S,SElemType*e)
top==S->
base)returnERROR;
*e=*(--(S->
top));
voidconversion()
pSqStackS;
SElemTypee;
intn;
InitStack(&
S);
printf("
InputanumbertoconverttoOCT:
scanf("
n);
intd;
InputOCT:
d);
if(n<
0)
\nThenumbermustbeover0."
return;
n)Push(S,0);
while(n){
Push(S,n%d);
n=n/d;
theresultis:
"
while(!
StackEmpty(*S)){
Pop(S,&
e);
e);
main()
\n\n\n\n"
conversion();
getch();
\n\nWelcometovisit!
2、栈实现单行编辑
typedefcharSElemType;
{SElemType*base;
SElemTypeGetTop(SqStackS)
if(S.top==S.base)returnERROR;
return*(S.top-1);
StatusDestroyStack(SqStack*S)
free(S->
base);
free(S);
#defineEOFILE'
`'
Statusvisit(SElemType*e)
*e);
returnOK;
charOP[10]={'
+'
-'
*'
/'
('
)'
#'
intprecede[7][7]={
1,1,2,2,2,1,1,
1,1,1,1,2,1,1,
2,2,2,2,2,3,0,
1,1,1,1,0,1,1,
2,2,2,2,2,0,3};
intIn(charc,char*op)
inti=0;
while(i<
7)
if(c==op[i++])
return1;
return0;
charPrecede(charop,charc)
intpos_op;
intpos_c;
inti;
for(i=0;
7;
i++)
if(op==OP[i])pos_op=i;
if(c==OP[i])pos_c=i;
switch(precede[pos_op][pos_c])
case1:
return'
>
'
;
case2:
<
case3:
='
charOperate(inta,chartheta,intb)
switch(theta)
case'
:
returna+b-'
0'
returna-b+'
return(a-'
)*(b-'
)+'
)/(b-'
charEvaluateExpression()
SqStack*OPND,*OPTR;
charc,x,theta;
chara,b;
OPTR);
Push(OPTR,'
OPND);
c=getchar();
while(c!
||GetTop(*OPTR)!
)
In(c,OP))
{Push(OPND,c);
c=getchar();
switch(Precede(GetTop(*OPTR),c))
Push(OPTR,c);
break;
Pop(OPTR,&
x);
break;
Pop(OPTR,&
theta);
Pop(OPND,&
b);
a);
Push(OPND,Operate(a,theta,b));
c=GetTop(*OPND);
DestroyStack(OPTR);
DestroyStack(OPND);
returnc;
chari;
\n\n\n\nOnlywithin0..9evaluation,inputaexpressionendwithsymbol#:
i=EvaluateExpression();
\nThisexpression'
sresultis:
%d\n\n\n\n"
i-'
3、假设一个算术表达式中包括圆括号、方括号和花括弧三种类型的括弧,编写一个判别表达式中括弧是否正确配对的函数correct(exp,tag);
其中:
exp为字符串类型的变量(可理解为每个字符占用一个数组元素),表示被判别的表达式,tag为布尔变量。
答:
用堆栈st进行判定,将(,[,或{入栈,当遇到},],或)时,检查当前栈顶元素是否是对应的(、[或{,若是则退栈,否则返回表示不配对。
当整个算术表达式检查完毕时,若栈为空表示括号正确配对,否则不配对。
include<
voidpush(charx);
voidpop();
voidcorrect(enumBoolean&
tag);
//原来的定义是voidcorrect(structStack*head,enumBoolean&
typedefstructStack
chardata;
structStack*next;
structStack*head,*p;
enumBoolean{FALSE,TRUE}tag;
head=(structStack*)malloc(sizeof(structStack));
data='
S'
//head'
sdatahasnotbeeninitialized!
!
correct(tag);
if(tag)
Right!
Wrong!
voidpush(charx)
p=(structStack*)malloc(sizeof(structStack));
if(!
p)
There'
snospace.\n"
data=x;
next=head;
head=p;
}
//ifyoudefinethe"
Correct"
functionlikethat
//DebugwillshowthatthePushactiondoesn'
ttakeeffection
voidpop()
Thestackisempty.\n"
head=head->
//voidcorrect(structStack*head,enumBoolean&
tag)
chary;
Pleaseenterabds:
y!
\n'
scanf("
y);
if((y=='
data=='
)||(y=='
]'
['
}'
{'
))
pop();
elseif((y=='
push(y);
/*调试程序显示,y并没有被推入堆栈中。
即head->
data的值在Push中显示为y的值,但是出Push函数。
马上变成Null。
*/
continue;
if(head-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告