求编程高手用c语言编写链栈完整源代码

发布网友

我来回答

1个回答

热心网友

/****************************************************************************************
实现链栈各种基本运算的算法 *
编写程序实现链栈种基本运算,并在此基础上设计一个主程序完成如下功能:
1、 初始化栈
2、 判断栈是否为空
3、 依次进栈a,b,c,d,e元素。
4、 判断栈是否为空
5、 输出栈的长度
6、 输出从栈顶到栈底元素
7、 输出出栈序列
8、 判断栈是否为空
9、 释放栈/
*********************************************************************************************/
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#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<<"栈的长度为"<<l<<endl;
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()吧??这个软件我没有用过

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com