实验四:栈和队列的基本操作
实验四:栈和队列的基本操作
- 采用链式存储实现栈的初始化、入栈、出栈操作。
- 采用顺序存储实现栈的初始化、入栈、出栈操作。
- 采用链式存储实现队列的初始化、入队、出队操作。
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 在主函数中设计一个简单的菜单,分别测试上述算法。
综合训练:
- 利用栈实现表达式求值算法。
- 利用栈实现迷宫求解。
- 编写c语言程序利用队列打印一个杨辉三角形的前n行。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
源码
#include<stdio.h>
#include"xxb.h"
int main()
{
print();
int ncase, n1, n2, n3, n4;
bool flag = true;
bool f1, f2, f3, f4;
SqStack s;
LinkLStack ls;
SqQueue Q;
LinkQueue LQ;
int e;
while (scanf("%d", &ncase) != EOF)
{
f1 = true;
f2 = true;
f3 = true;
f4 = true;
switch (ncase)
{
case 1:
print1();
IniLStack(ls);
while (scanf("%d", &n1) != EOF)
{
switch (n1)
{
case 1:
if (IniLStack(ls))
printf("链式栈建立成功!\n");
else
printf("链式栈建立失败!\n");
break;
case 2:
if (PushLStack(ls, e))
printf("入栈成功!\n");
else
printf("入栈失败!\n");
break;
case 3:
if (PopLStack(ls, e))
printf("e = %d出栈成功!\n", e);
else
printf("栈为空!\n");
break;
case 0:
f1 = false;
break;
default:
printf("
输入有误,请重新输入!\n");
break;
}
if (!f1)
break;
print1();
}
break;
case 2:
print2();
while (scanf("%d", &n2) != EOF)
{
switch (n2)
{
case 1:
if (Initack(s))
printf("顺序栈建立成功!\n");
else
printf("顺序建立失败!\n");
break;
case 2:
if (Push(s, e))
printf("入栈成功!\n");
else
printf("入栈失败!\n");
break;
case 3:
if (!Pop(s, e))
printf("顺序栈为空!\n");
else
printf("e = %d出栈成功!\n", e);
break;
case 0:
f2 = false;
break;
default:
printf("
输入有误,请重新输入!\n");
break;
}
if (!f2)
break;
print2();
}
break;
case 3:
print3();
while (scanf("%d", &n3) != EOF)
{
switch (n3)
{
case 1:
if (InitQueue(LQ))
printf("链式队列构造成功!\n");
else
printf("链式队列构造失败!\n");
break;
case 2:
printf("请输入如队列元素e=");
scanf("%d", &e);
if (EnQueue(LQ, e))
printf("链式队列入列成功!\n");
else
printf("链式队列入列失败!\n");
break;
case 3:
if (DeQueue(LQ, e))
printf("e = %d出队列成功!\n", e);
else
printf("队列为空!\n");
break;
case 0:
f4 = false;
break;
default:
printf("
输入有误,请重新输入!\n");
break;
}
if (!f4)
break;
print4();
}
break;
case 4:
print4();
while (scanf("%d", &n4) != EOF)
{
switch (n4)
{
case 1:
if (InitQueue(Q))
printf("顺序队列初始化成功!\n");
else
printf("顺序队列初始化失败!\n");
break;
case 2:
printf("请输入如队列元素e=");
scanf("%d", &e);
if (EnQueue(Q, e))
printf("插入队列成功!\n");
else
printf("插入失败!\n");
break;
case 3:
if (DeQueue(Q, e))
printf("e = %d出队列成功!\n", e);
else
printf("队列为空!\n");
break;
case 0:
f3 = false;
break;
default:
printf("
输入有误,请重新输入!\n");
break;
}
if (!f3)
break;
print3();
}
break;
case 0:
flag = false;
break;
default:
printf("
输入错误,请重新输入,谢谢!\n");
break;
}
if (!flag)
break;
print();
}
return 0;
}