C语言入栈出栈操作的程序,希望有人为我解答

 我来答
奈运发8584
2015-04-15 · TA获得超过179个赞
知道答主
回答量:159
采纳率:100%
帮助的人:60.4万
展开全部

您好:

你是在学习数据结构方面的知识吧。

首先呢,你学习栈,要了解栈的定义,明白它是怎么一回事,就是去理解他的思想。

最后才去用代码来体现出来。

栈是先进后出,其实是用代码控制的,

其实你要他先进先出也可以。

你只要明白他的原理就行。

代码,你可以理解为跟计算的一种对话的语言。

不用想的那么复杂。

就好比说话,你只要知道你要说什么就行(算法),而不用刻意明白要怎么说(语法)。

下面给我出我以前写的代码,关于栈的,顺序栈,其实还有链栈。

/*   数据结构-栈   */
/*   异常的细节处理还没弄好*/
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
#define len_chu_shi 50   //初始空间大小
#define len_zeng_jia 10  //额外增加空间大小
#define OK 0       //正确
#define OVER -2     //
#define ERROR -1   //
using namespace std;
typedef int elem_type;          //元素类型
typedef int function_type;      //函数类型
typedef struct zhan
{
   elem_type *top;    //栈顶
   elem_type *base;   //栈底
   int len;           //当前空间大小
}zhan;                //栈结构

function_type Init_zhan(zhan *exam);//初始化栈
function_type Get_top(zhan *exam,elem_type *e);//获取栈顶元素
function_type Add_top(zhan *exam,elem_type *e);//增加栈顶元素
function_type Delete_top(zhan *exam, elem_type *e);//删除栈顶元素

int main(int argc,char *argv[])
{
   zhan *example = (zhan *)malloc(sizeof(zhan));
   Init_zhan(example);
   return OK;
}

function_type Init_zhan(zhan *exam)
{
   exam->base = (elem_type *)malloc(len_chu_shi*sizeof(elem_type));
   if(!exam->base)  //分配失败
     exit(OVER);
   exam->top = exam->base;
   exam->len = len_chu_shi;
   return OK;
}//--end
function_type Get_top(zhan *exam,elem_type *e)
{
   if(!exam->base)
     exit(OVER);
   *e = *(exam->top - 1);  //不能用自减运算符,那样会改变栈顶指针的值
   return OK;
}//--end
function_type Add_top(zhan *exam,elem_type *e)
{
   if(exam->len <= exam->top - exam->base)  //我个人觉得,如果 已经"<",就已经数据溢出了,就应该报错
     exam->base = (elem_type *)realloc(exam->base,(exam->len + len_zeng_jia)*sizeof(elem_type));
   if(!exam->base)  //分配失败
     exit(OVER);
   *(exam->top++) = *e;   //应该是先改变栈顶指针的内容,然后栈顶指针再自增
   exam->len += len_zeng_jia;
   return OK;
}//--end
function_type Delete_top(zhan *exam, elem_type *e)
{
   if(!exam->base)  //空栈
     exit(OVER);
   *e = *(--exam->top);  //应该是栈顶指针先自减,然后获取栈顶指针的内容
   return OK;
}//--end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式