实现链栈的各种基本运算的算法c语言,求编程高手用c语言编写链栈完整源代码...

匿名用户

1级

2011-01-14 回答

/****************************************************************************************

实现链栈各种基本运算的算法 *

编写程序实现链栈种基本运算,并在此基础上设计一个主程序完成如下功能:

1、 初始化栈

2、 判断栈是否为空

3、 依次进栈a,b,c,d,e元素。

4、 判断栈是否为空

5、 输出栈的长度

6、 输出从栈顶到栈底元素

7、 输出出栈序列

8、 判断栈是否为空

9、 释放栈/

*********************************************************************************************/

#include

#include

#include

#define OVERFLOW -2

#define ok 1

#define STACK_INIT_SIZE 100 //存储空间初始分配量

#define STACKCREMENT 10 //增加分量

typedef struct{

char *base;

char *top;

int stacksize;//当前分配的空间

int lenght;

}SqStack; //Sqlist

/*********************************初始化栈*************************************/

int InitStack(SqStack &S)

{

S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));// 分配存储空间

if(!S.base) exit(0);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

S.lenght=0;

return 1;

}

/******************************************************************************/

/********************************判断栈是否为空******************************/

bool StackEmpty(SqStack&S){

if(S.top==S.base)return 1;

else

return 0;

}

/*****************************释放栈********************************/

int FreeStack(SqStack&S)

{

free(S.base);

S.top=S.base;

return ok;

}

/******************************************************************/

/*********************求出栈的长度*********************************/

int StackLenth(SqStack&S){

S.lenght=S.top-S.base;

return S.lenght;

}

/******************************************************************/

/**********************入栈*****************************************/

int Push(SqStack &S,char e){

if(S.lenght>=S.stacksize){

S.base=(char*)realloc(S.base,(S.stacksize+STACKCREMENT)*sizeof(char));//增加分配存储

if(!S.base) exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKCREMENT;

}

*S.top++=e;

S.lenght++;

return ok;

}

/**************************************************************/

/****************************出栈****************************/

char Pop(SqStack&S,char &e){

if(S.base==S.top)

return 0; //当栈为空时,返回错误

else

e=*--S.top;

S.lenght--;

return e;

}

/*************************显示*******************************/

void DispStack(SqStack S)

{

int i;

for(i=S.lenght;i>0;i--)

{

printf("%c",*(--S.top));

}

printf("\n");

}

//*******************主函数************************************/

int main(){

int i;

SqStack Lst;

char a,b,c,d,e,f;

char g;

printf("初始化栈:\n");

InitStack(Lst);

printf("依次进栈元素a,b,c,d,e,f\n");

cin>>a>>b>>c>>d>>e>>f;

Push(Lst,a);

Push(Lst,b);

Push(Lst,c);

Push(Lst,d);

Push(Lst,e);

Push(Lst,f);

printf("打印\n");

DispStack(Lst);

int l=StackLenth(Lst);

cout<

printf("出栈序列:");

for(i=1;i<=6;i++)

{

Pop(Lst,g);

printf("%c ",g);

}

printf("\n");

printf("栈为:%s\n",(StackEmpty(Lst)?"空":"非空"));

printf("释放栈\n");

FreeStack(Lst);

return 0;

}

可以正确运行,你看下可以不??希望能帮到楼主! 我用visual C++6.0编译的,现在主流都是用这个,不好意思,WINTC我没有用过,楼主可以自己改吗??

额,你们老师太不人道了,WINTC好像在后面得加一个getch()吧??这个软件我没有用过

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值