用C语言编写函数实现顺序栈的进栈、退栈、取栈顶的算法。

部分函数我已经有了,希望大神能帮忙解决主函数的编写... 部分函数我已经有了,希望大神能帮忙解决主函数的编写 展开
 我来答
匿名用户
推荐于2017-09-05
展开全部
#include<stdio.h>
#define stacksize 100 //假定预分配的栈空间最多为100 个元素
typedef char elementtype; //假定栈元素的数据类型为字符 ,在此处可以自行设置
typedef struct
{
elementtype data[stacksize];
int top;
}seqstack;
// 置空栈
void initstack(seqstack *s)
{
s->top=-1;
//解释一下,s->top 指向的是当前栈顶元素的位置
//当要向栈中添加一个新元素时,要先将s->top增加1,
//此时s->top 指向的就是新元素要添加的位置了。
//所以当栈为空时,填加第一元素时,top加1 后
//s->top的值就变为0,也就是第一个元素的位置了。
}
//判栈空
int stackempty(seqstack *s)
{
if(s->top==-1)
return 1; //若相等就返回1,否则为0
else return 0;
}
//入栈
void push(seqstack *s,elementtype x)
{
if(s->top==stacksize -1 ) //进栈前判断栈是否已经满了
printf(" stack overflow\n");
else
{
s->top= s->top + 1;
s->data[s->top]=x;
}
}
//出栈
elementtype pop(seqstack *s)
{
if(stackempty(s)) //出栈前先判断当前栈中是否有内容
printf("stack is empty\n");
else
{
return s->data[s->top--]; //出栈后s->top的值会自减1
}
}
//取栈顶元素(只是想知道栈顶的值,并没有出栈)
elementtype gettop(seqstack *s)
{
if(stackempty(s))
{
printf("stack already empty.\n");
}
else return s->data[s->top];
}
int main()
{
elementtype x;
seqstack *s; //定义一个栈,用指针的方式定义的
initstack(s); //想初始化定义好的栈
//当栈为空时调用出栈操作
pop(s);

//向栈中添加一个元素a
push(s,'a');

//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);

//再添加一个元素b
push(s,'b');

//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);

//弹出栈顶的元素
x=pop(s);
printf("%c\n",x);

//观察弹出后栈顶元素的变化情况
x=gettop(s);
printf("%c\n",x);
return 0;
}
追问
这是完整程序吗?怎么运行不出来?
追答
int main()
{
elementtype x;
seqstack S; //此处略作修改。。。。
seqstack *s=&S; //定义一个栈,用指针的方式定义的
initstack(s); //想初始化定义好的栈
//当栈为空时调用出栈操作
pop(s);

//向栈中添加一个元素a
push(s,'a');

//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);

//再添加一个元素b
push(s,'b');

//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);

//弹出栈顶的元素
x=pop(s);
printf("%c\n",x);

//观察弹出后栈顶元素的变化情况
x=gettop(s);
printf("%c\n",x);
return 0;
}
你把上面的main()函数换成这个,再运行一下这个,这是我在几个运行环境中都试过的,vc,vb,gcc都行的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式