栈和队列的基本运算.docx

上传人:b****5 文档编号:6020507 上传时间:2023-01-03 格式:DOCX 页数:13 大小:87.96KB
下载 相关 举报
栈和队列的基本运算.docx_第1页
第1页 / 共13页
栈和队列的基本运算.docx_第2页
第2页 / 共13页
栈和队列的基本运算.docx_第3页
第3页 / 共13页
栈和队列的基本运算.docx_第4页
第4页 / 共13页
栈和队列的基本运算.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

栈和队列的基本运算.docx

《栈和队列的基本运算.docx》由会员分享,可在线阅读,更多相关《栈和队列的基本运算.docx(13页珍藏版)》请在冰豆网上搜索。

栈和队列的基本运算.docx

栈和队列的基本运算

实验三栈和队列的基本运算

一、实验目的

(1)掌握栈和队列的各种存储结构及基本运算的实现。

(2)掌握堆栈后进先出运算原则在解决实际问题中的应用。

(3)掌握队列先进先出运算原则在解决实际问题中的应用。

(4)掌握递归程序设计的特点和编程方法。

二、实验要求:

(1)熟练掌握栈和队列的基本运行及其操作。

(2)理解实训案例的算法,掌握线栈和队列在实际中的运用。

(3)将上机程序全部调试通过。

(4)独立完成一个至两个实训项目,保存程序运行结果,并结合程序进行分析。

三、实验内容:

(1)任意输入一个字符串,按反序输出。

要求字符串从键盘随机输入,字符长度不做具体限制。

实现时,以链栈为手段。

(2)设计一个算法,判定一个字符串是否是对称字符串。

若是,则返回1,否则返回0。

(3)括号配对检查。

试设计一个程序对任意输入的语句或数学表达式,判断其符号是否匹配。

若匹配,则返回1;否则返回0。

(4)编写递归和非递归程序,计算下列表达式的值

1n=0

2xn=1

n>1

(5)舞伴问题。

假设在周末舞会上,男士和女士各自组成一排,跳舞开始的时候,依次从男队和女队上各出一人配成舞伴。

若两队初始人数不相同,则较长的那一队中未匹配对者等待下一轮舞曲。

现要求写一篇算法模拟上述舞伴配对的问题。

四、程序代码:

1

#include

#include

typedefcharElemType;

typedefstructsnode{

ElemTypedata;

structsnode*next;

}LinkSTACK;

voidInitStack(LinkSTACK**top)

{*top=(LinkSTACK*)malloc(sizeof(LinkSTACK));

(*top)->next=NULL;

}

intpush(LinkSTACK**top,ElemTypex)

{LinkSTACK*s;

s=(LinkSTACK*)malloc(sizeof(LinkSTACK));

s->data=x;

s->next=(*top)->next;

(*top)->next=s;

return1;

}

intEmpty(LinkSTACK**top)

{

return((*top)->next==NULL?

1:

0);}

intPop(LinkSTACK**top,ElemType*x)

{

LinkSTACK*s;

if(Empty(top)){

printf("Stackisfree!

\n");

return0;

}

s=(*top)->next;

*x=s->data;

(*top)->next=s->next;

return1;

}

voidmain()

{charch;

LinkSTACK*top;

InitStack(&top);

printf("请输入一字串");

while((ch=getchar())!

='\n')push(&top,ch);

printf("\n");

while(!

Empty(&top)){

Pop(&top,&ch);

printf("%c",ch);

}

}

2

#include

#include

#defineMAXSIZE40

typedefcharElemType;

typedefstruct{

ElemTypedata[MAXSIZE];

inttop;

}STACK;

voidInitStack(STACK*S)

{S->top=-1;}

intPush(STACK*S,ElemTypex)

{if(S->top==MAXSIZE-1){

printf("Stackisfull\n");

return0;

}

S->top++;

S->data[S->top]=x;

return1;

}

intEmpty(STACK*S)

{return(S->top==-1?

1:

0);}

intPop(STACK*S,ElemType*x)

{if(Empty(S)){

printf("Stackisfree!

\n");

return0;

}

*x=S->data[S->top];

S->top--;

return1;

}

main()

{STACKst;

charstr[100],ch;inti,len,same=1;

InitStack(&st);

printf("请输入一字串:

");

gets(str);

len=strlen(str);

for(i=0;i

Push(&st,str[i]);

if(len%2==0)i=len/2;

elsei=(len+1)/2;

while(!

Empty(&st)){

Pop(&st,&ch);

if(ch!

=str[i]){same=0;break;}

i++;

}

if(same)printf("%s是对称字串!

",str);

elseprintf("%s不是对称字串!

",str);

}

3

#include

#include

#defineMAXSIZE40

typedefcharElemType;

typedefstruct{

ElemTypedata[MAXSIZE];

inttop;

}STACK;

voidInitStack(STACK*S)

{s->top=-1;}

intPush(STACK*S,ElemTypex)

{if(s->top==MAXSIZE-1){

printf("Stackisfull!

\n");

return0;

}

s->top++;

s->data[s->top]=x;

return1;

}

intEmpty(STACT*S)

{retutrn(s->top==-1?

1:

0);}

intpop(STACK*S,ElemType*x)

{if(Empty(s)){

printf("\nstackisfree!

");

return0;

}

*x=s->data[s->top];

s->top--;

return1;

}

intmatch(char*exps)

{STACKst;

intpos=0,intyesmatch=1;

while(exps[i]&&yesmatch){

switch(exps[pos]){

case'(':

case'[':

case'{':

Push(&st,eps[pos]);break;

case')':

case']':

case'}':

pop(&st,&ch);

if(ch!

=exps[pos])yesmatch=0;break;

}

pos++;

}

return(yesmatch&&Empty(&st))?

1:

0;

}

main()

{charstr[100];

intyesmatch;

printf("请输入一字串:

");

gets(str);

yesmatch=match(str);

if(yesmatch)

printf("是匹配是字串!

");

else

printf("不是匹配的字串!

");

}

4

#include

doublep(intn,intx)

{

doublef;

if(n==0)f=1;

elseif(n==1)f=2*x;

elsef=2*x*p(n-1,x)-2*(n-1)*p(n-2,x);

returnf;}

 

#include

#defineMAXSIZE40

typedefstruct{

intn;intx;}ElemType;

typedefstruct{

ElemTypedata[MAXSIZE];

inttop;

}STACK;

voidInitStack(STACK*S)

{S->top=-1;}

doublep(intn,doublex)

{STACKst;

inti;

doublef1=1,

doublef2=2*x,

InitStack(&st);

for(i=n;i>=2,i--){

st.top++;

st.data[st.top].n=i;

}

while(top>=0){

st.data[st.,top].x=2*x*f2-2*(st.data[st.top].n-1)*f1;

f1=f2;

f2=st.data[st.top].x;

st.top--;}

returnf2;}

main()

{intn;

doublex;

printf("请输入n与x的值:

");

scanf("%d%f",&n,&x);

printf("\n表达式值为%1f:

",p(n,x));

}

 

5

#include

typedefstruct{

charname[20];

charsex;

}ElemType;

typedefstructqnode{

Elemtypedata;

structqnode*next;

}QTYPE;

typedefstructqptr{

QTYPE*front,*rear;

intcount;

}SQUEUE;

voidInitQueue(SQUEUE*LQ)

{QTYPE*p;

p=(QTYPE*)malloc(sizeof(QTYPE));

p->next=NULL;

LQ->front=LQ->rear=p;

LQ->count=0;

}

intEnQueue(SQUEUE*LQ,ELemTypex)

{QTYPE*s;

s=(QTYPE*)malloc(sizeof(QTYPE));

s->data=x;

s->next=LQ->rear->next;

LQ->rear->next=s;

LQ->count++;

return1;

}

intEmpty(SQUEUE*LQ)

{return(LQ->front==LQ->rear?

1:

0);}

intOutQueue(SQUEUE*LQ,ElemType*x)

{QTYPE*p;

if(Empty(LQ)){

printf("\nQueueisfree!

");

return0;

}

p=LQ->front->next;

*x=p->data;

LQ->front->next=p->next;

LQ->count--;

if(LQ->front->next==NULL)

LQ->rear=Lq->front;

free(p);

return1;

}

intGetHead(SQUEUE*LQ,ElemType*x)

{if(Empty(LQ)){

printf("\nQueueisfree!

");

return0;

}

*x=LQ->front->next->data;

return1;

}

voidDancePartner()

{FILE*fp;

ElemTypep;

SQUEUEmdancer,fdancer;

InitQueue(&mdancer);InitQueue(&fdancer);

if((fp=fopen("dancer.dat","r"))==NULL){

printf("can\'topenthefile!

");

exit(0);

}

while(!

feof(fp){

p.sex=fgetc(fp);

fgetc(fp);

fgets(fp,10,p.name);

if(p.sex=='F')

EnQueue(&fdancer,p);

else

EnQueue(&mdancer,p);

}

printf("舞伴是:

\n");

while(!

Empty(&fdancer)&&!

Empty(&mdancer)){

outQueue(&fdancer,&p);

printf("%s",p.name);

OutQueue(&mdancer.&p);

printf("%s",p.name);

}

if(!

Empty(&fdancer)){

printf("\n还有%d个女士等下一轮。

\n",fdancer.count);

GetHead(&fdancer,&p);

printf("%swillbethefirsttogetapartner.\n",p,name);

}

elseif(!

Empty(mdancer)){

printf("\n还有%d个男士等下一轮。

\n",dmancer.count);

GetHead(&mdancer,&p);

printf("%s将得到第一个舞伴\n",p.name);

}

}

五、实验结果:

六、通过这次写实验报告,我深切的理解了这门课的本质。

刚开始学这门课时,当时还不清楚这门课程的目的,现在,我真正的理解了:

数据结构像是身体的骨骼,而C语言是填充这骨骼的肉体,二者相结合才能使整个程序更加完整,健全。

数据结构是个框架,模型,抽象数据类型中列举了各种操作,而所用的C语言,将各种操作描述出来构成算法。

数据结构+算法=程序设计。

在这次设计的过程中,我还遇到了,很多的问题。

顺序表是按顺序存储的,用了一维数组来存储,又结合C的程序设计,我又用了类,但是,在执行时出现了问题。

后来问同学,指出我的错误,不过获益不少。

我又重新整理思路,把顺序表的基本操作写好了。

虽然走了很多弯路,但是让我认识到,一定要创新,大胆,不能按照旧的思路去干新的事情。

这次的实验报告,让我受益匪浅,不仅有知识方面的,还有生活和精神上的。

总之,我会继续我的兴趣编程,相信在编程的过程中,能不断的提高自己。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1