问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

栈和队列的应用—魔王语言

发布网友 发布时间:2022-03-29 17:16

我来回答

1个回答

热心网友 时间:2022-03-29 18:45

虽然这个实验是"栈和队列"这章的,但并不表示你的程序中一定要用到队列啊.
把程序中的队列改成另一个栈就行了.

修改后的程序如下:

#include <stdio.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;

void InitStack(SqStack &S); //构造一个新栈S
bool StackEmpty(SqStack &S);
void Push(SqStack &S, char e); //把e入栈
void Pop(SqStack &S, char &e); //把栈顶元素出栈,赋值给e

void InitStack(SqStack &S) //这里你原来写的是InitSack,要改过来
{
S.base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
}

bool StackEmpty(SqStack &S)
{
return S.top == S.base;
}

void Push(SqStack &S, char e)
{
if(S.top - S.base >= S.stacksize)
{
S.base = (int *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(int));
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*(S.top++) = e;
}

void Pop(SqStack &S, char &e)
{
if(S.top != S.base)
{
e = *(--S.top);
}
}

int main()
{
char e, h, eve, cs, css[100];
int k = 0;
SqStack S;
InitStack(S);

while(scanf("%c", &cs) != EOF)
{
if(cs == '#')
break;
else
{
css[k] = cs;
k++;
}
}

for(int i = k - 1; i >= 0; i--)
{
if(')' == css[i])
{
//这里把临时队列改成临时栈,下面相应的队列操作都改成栈操作
SqStack temp;
InitStack(temp);
i--;
while('(' != css[i])
{
Push(temp, css[i]);
i--;
}
Pop(temp,eve);
while(!StackEmpty(temp))
{
Push(S, eve);
Pop(temp, h);
Push(S, h);
}
Push(S, eve);
i--;
if('A' == css[i])
{
Push(S, 'e');
Push(S, 'a');
Push(S, 's');
}
if('B' == css[i])
{
Push(S, 'e');
Push(S, 'a');
Push(S, 's');
Push(S, 'd');
Push(S, 'e');
Push(S, 'a');
Push(S, 's');
Push(S, 't');
}
}
else
{
if('A' == css[i])
{
Push(S, 'e');
Push(S, 'a');
Push(S, 's');
}
if('B' == css[i])
{
Push(S, 'e');
Push(S, 'a');
Push(S, 's');
Push(S, 'd');
Push(S, 'e');
Push(S, 'a');
Push(S, 's');
Push(S, 't');
}
}
}

while(!StackEmpty(S))
{
Pop(S, e);
printf("%c", e);
}
printf("\n");
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"你是在哪看到我的照片?"怎么说英语 留恋地看着我的照片用英语怎么说? 高德iphone地图下载 苹果手机高德地图怎么下载地图 孕中期适合出游吗 哪些孕妇不适合长途旅行 孕妇坐长途车旅行的好处 孕妇出游的最佳时间 孕晚期适合出游吗 孕妇外出旅行禁忌 小米11烧wifi啥表现 交通银行ATM机上能存50吗? ATM自动柜台机存款能存50元吗? 建行atm存款机还能存50的吗 现在中国银行atm机可以存五十吗 邮政行的ATM机能存50元吗?? atm可以存50吗 哪家银行的ATM能取50元的? 自动取款机存钱,50元的可以存吗 哪个银行ATM可以存50元呀? 如何实现背景的动图效果 可不可以把GIF图片作为电脑桌面背景? 电脑桌面背景可以使用动态图吗? 如何PS用制作透明背景动态图 电脑的背景图要怎么弄成可以动的? 电脑桌面背景能设置GIF动态图片吗?然后桌面会动的? 求几张透明背景的烟花动图 电脑桌面背景如何设置成动态图片? 如何把电脑桌面搞成动态的 微信推文中如何添加动态背景?例如会动的雪花背景 怎么样让照片背景图动起来 梦见被人追赶,到处躲藏,后来发现追的不是自己,... 为什么我睡觉经常梦见别人追赶我 或者我躲藏? 热感冒吃什么药好的快呀? 热感冒吃什么感冒药比较好? 热感冒吃什么药? 风热感冒吃什么食物 十一种食物助你快速 风热感冒吃什么食物好? 热感冒吃什么东西好? 风热感冒吃什么药最好 热感冒了吃什么水果好 热感冒吃什么食物好的快 风热感冒应该吃什么药? 热感冒吃什么药好 m 热感冒吃什么好得快 风热感冒的饮食,食疗,风热感冒吃什么好 风热感冒吃什么食物能好的快 上火了 热感冒 吃点什么好? 风热感冒应该吃什么 热感冒吃什么药见效快 计算机理论题 试举出日常生活中表、栈、队列、树、图结构的实例各一个。