数据结构实验报告栈和队列Word文档格式.docx

上传人:b****5 文档编号:17486137 上传时间:2022-12-06 格式:DOCX 页数:18 大小:19.63KB
下载 相关 举报
数据结构实验报告栈和队列Word文档格式.docx_第1页
第1页 / 共18页
数据结构实验报告栈和队列Word文档格式.docx_第2页
第2页 / 共18页
数据结构实验报告栈和队列Word文档格式.docx_第3页
第3页 / 共18页
数据结构实验报告栈和队列Word文档格式.docx_第4页
第4页 / 共18页
数据结构实验报告栈和队列Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构实验报告栈和队列Word文档格式.docx

《数据结构实验报告栈和队列Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告栈和队列Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构实验报告栈和队列Word文档格式.docx

/*定义元素的类型*/

/*

(1)---补充栈的顺序存储分配表示,采用定长和可变长度存储均可*/

typedefstruct

{

ElemType*base;

ElemType*top;

intstacksize;

}SqStack;

intInitStack(SqStack*S);

/*构造空栈*/

intPush(SqStack*S,ElemTypee);

/*入栈*/

intPop(SqStack*S,ElemType*e);

/*出栈*/

intPopSq(SqStack*S);

intGetTop(SqStack*S,ElemType*e);

/*获取栈顶元素*/

intClearStack(SqStack*S);

/*清空栈*/

intStackEmpty(SqStack*S);

/*判断栈是否为空*/

intStackLength(SqStack*S);

/*求栈的长度*/

voidconversion();

/*十进制转换为二进制*/

voidCorrect();

/*判断表达式括号是否匹配*/

/*

(2)---初始化栈函数*/

intInitStack(SqStack*S)

S->

base=(ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType));

if(!

S->

base)

{

returnERROR;

}

top=S->

base;

stacksize=STACK_INT_SIZE;

returnOK;

}/*InitStack*/

/*(3)---入栈函数*/

intPush(SqStack*S,ElemTypee)

if(S->

top-S->

base>

=S->

stacksize)

base=(ElemType*)realloc(S->

base,(S->

stacksize+STACKINCREMENT)*sizeof(ElemType));

base+S->

stacksize;

stacksize+=STACKINCREMENT;

*S->

top++=e;

}/*Push*/

/*(4)---出栈函数*/

intPop(SqStack*S,ElemType*e)

top==S->

--S->

top;

*e=*S->

}/*Pop*/

intPopSq(SqStack*S)

}

/*(5)---返回栈顶元素函数*/

intGetTop(SqStack*S,ElemType*e)

*e=*(S->

top-1);

}/*GetTop*/

/*(6)---清空栈函数*/

intClearStack(SqStack*S)

if(InitStack(S))

printf("

InitSuccess!

"

);

else

InitFail!

}/*ClearStack*/

/*(8)---判断栈是否为空*/

intStackEmpty(SqStack*S)

base==S->

top)

}/*StackEmpty*/

/*(9)---返回栈的长度函数*/

intStackLength(SqStack*S)

returnS->

}/*StackLength*/

/*(10)---十进制整数转换为二进制并输出函数*/

voidConversion()

inte;

SqStacksq;

InitStack(&

sq);

intcount;

inputcount:

scanf("

%d"

&

count);

while(count!

=0)

Push(&

sq,count%2);

count=count/2;

while(Pop(&

sq,&

e))

%d"

e);

}/*Conversion*/

/*(11)---判断表达式括弧是否匹配(假设只有一种小括弧)函数*/

voidCorrect()

SqStacksqs;

sqs);

chara[100],c;

inti=0;

input:

while((c=getchar())!

='

\n'

a[i++]=c;

for(i=0;

i<

strlen(a);

i++)

if(a[i]=='

('

sqs,a[i]);

)'

PopSq(&

if(StackEmpty(&

sqs))

OK!

error!

}/*Correct*/

/*定义菜单字符串数组*/

intmenu_select()

char*menu[]={"

\n***************MENU******************\n"

"

1.InitSatck\n"

/*初始化顺序栈*/

2.PushElement\n"

/*入栈*/

3.GetTopElement\n"

/*获得栈顶元素*/

4.ReturnStackLength\n"

/*返回栈的长度*/

5.StackIsEmpty\n"

/*判断是否栈空*/

6.PopElement\n"

/*出栈*/

7.ClearStack\n"

/*清空栈*/

8.Conversion\n"

/*利用栈进行数制转换*/

9.Correct\n"

/*利用栈进行括号匹配*/

0.Quit\n"

/*退出*/

};

chars[3];

/*以字符形式保存选择号*/

intc,i;

/*定义整形变量*/

for(i=0;

i<

11;

i++)/*输出主菜单数组*/

%s"

menu[i]);

do

\nEnteryouchoice(0~9):

/*在菜单窗口外显示提示信息*/

s);

/*输入选择项*/

c=atoi(s);

/*将输入的字符串转化为整形数*/

while(c<

0||c>

9);

/*选择项不在0~9之间重输*/

returnc;

/*返回选择项,主程序根据该数调用相应的函数*/

intmain()

SqStackss;

ss);

for(;

;

switch(menu_select())

case1:

\n1-InitSatck:

\n"

if(InitStack(&

ss))

InitOK!

InitERROR!

break;

case2:

\n2-PushElement:

inputdata(Terminatedbyinputingacharacter):

while(scanf("

e)==1)

if(Push(&

ss,e))

Push%dOK!

Push%dERROR!

inputdata:

(Terminatedbyinputingacharacter)"

getchar();

case3:

\n3-GetTopElement:

if(GetTop(&

ss,&

Topis%d"

StackisEmpty!

case4:

\n4-ReturnStackLength:

StackLengthis%d"

StackLength(&

ss));

case5:

\n5-StackIsEmpty:

StackisnotEmpty!

case6:

\n6-PopElement:

AllelementsofStack:

case7:

\n7-ClearStack:

ClearStack(&

ClearStackOK!

case8:

\n8-Conversion:

Conversion();

case9:

\n9-Correct:

Correct();

case0:

exit(0);

return0;

2、按照要求完成程序exp3_2.c,实现循环队列的相关操作。

•初始化队列;

•返回当前队列长度;

•连续入队2,4,6,8,10;

•获取当前队头元素;

•判断当前队列是否为空;

•队列元素依次出队;

exp3_2.c部分代码如下:

#defineMAXQSIZE100

typedefintQElemType;

/*

(1)---循环队列顺序存储表示*/

QElemType*base;

intfront;

intrear;

}SqQueue;

/*

(2)---构造一个空循环队列*/

intInitQueue(SqQueue*Q)

Q->

base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));

Q->

front=Q->

rear=0;

}/*InitQueue*/

/*(3)---返回循环队列的长度*/

intQueueLength(SqQueue*Q)

returnQ->

rear-Q->

front;

}/*QueueLentgh*/

/*(4)---入队操作*/

intEnQueue(SqQueue*Q,QElemTypee)

if((Q->

rear+1)%MAXQSIZE==Q->

front)

base[Q->

rear]=e;

rear=(Q->

rear+1)%MAXQSIZE;

}/*EnQuese*/

/*(5)---出队操作*/

intDeQueue(SqQueue*Q,QElemType*e)

if(Q->

front==Q->

rear)

*e=Q->

front];

front=(Q->

front+1)%MAXQSIZE;

}/*DeQueue*/

/*(6)---判断队列是否为空*/

intQueueEmpty(SqQueue*Q)

rear==Q->

}/*QueueEmpty*/

/*(7)---取队头元素*/

intGetHead(SqQueue*Q,QElemType*e)

rear==Q->

front)//队列空的判断

*e=Q->

//将队头元素赋值给e

front=(Q->

front+1)%MAXQSIZE;

//front指针向后一位置,若到最后,则转到数组头部

}/*GetHead*/

/*销毁队列*/

intDestroyQueue(SqQueue*Q)

rear=Q->

front=0;

free(Q->

base);

}/*DestroyQueue*/

1.InitQueue\n"

/*初始化循环队列*/

2.GetQueueLength\n"

/*求队列的长度*/

3.EnQueue\n"

/*入队操作*/

4.GetHead\n"

/*取队头元素*/

5.QueueIsEmpty\n"

/*判断是否队空*/

6.DeQueue\n"

/*出队操作*/

/*销毁队列并退出*/

=8;

i++)

\nEnteryouchoice(0~6):

6);

/*主函数*/

SqQueueqq;

InitQueue(&

qq);

\n1-InitQueue:

if(InitQueue(&

qq))

\n2-GetQueueLength:

Queuelengthis%d"

QueueLength(&

qq));

\n3-EnQueue:

pleaseinputdata:

e);

if(EnQueue(&

qq,e))

%dEnQueueOK!

EnQueueError!

\n4-GetHead:

if(GetHead(&

qq,&

Headis%d\n"

GetHeadError!

\n5-QueueEmpty:

if(QueueEmpty(&

QueueisEmpty!

QueueisnotEmpty"

\n6-DeQueue:

Queueis:

while(!

QueueEmpty(&

if(DeQueue(&

DestroyQueue(&

3、递归(汉诺塔问题)

利用递归算法程序设计编写程序exp3_3.c,解决n阶汉诺塔问题(A柱为起始,C柱为目的)。

请将程序补充完整,并分别调试盘子数为3,7的情况。

exp3_3.c部分代码如下:

intstep=1;

voidhanoi(charA,intn,charB,charC)

if(n==1)

第%d步:

step++);

将%c柱子上唯一的1个盘子移到%c柱子!

A,C);

先将%c柱子上的多余的%d个盘子移到%c柱子中过程:

A,n-1,B);

hanoi(A,___n-1_____,C,____B_____);

将%c柱子上的最大的盘子移到%c柱子中!

接下来将%c柱子上的%d个盘子移到%c柱子中过程:

B,n-1,C);

hanoi(B,_____n-1____,A,___C____);

intn;

charA,B,C;

A='

A'

B='

B'

C='

C'

输入A柱子上盘子的个数:

n);

hanoi(A,n,B,C);

\n移动结束"

4、拓展实验:

设计程序实现简单四则算术运算。

要求说明:

(1)从键盘接收算术表达式,以“#”表示接收结束;

(2)输出算术表达式的值;

(3)操作数仅限于非负整数,操作符只能是+、-、*、/、^、(、)

(4)可以判断表达式的合法性(如括号的匹配)

提示:

借助栈来完成,将一个表达式转换为后缀表达式,并按照后缀表达式进行计算,得出表达式得结果。

【实验小结】

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

当前位置:首页 > 成人教育 > 成考

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

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