|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求助大佬们,我的顺序栈算法哪个地方出错了。每次将所有出栈的时候,出来的结果与输入的结果总是不完全相符,第一个和最后一个元素总是不对
函数中的SqStack &S和ElemType &e让参数能够双向传递,这里使用了c++引用特性,所以调试时请将文件改为c++格式。c++里的new的作用和malloc一致
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- #define MaxSize 100
- #define ERROR 0
- #define OK 1
- typedef char ElemType;
- typedef int Status;
- typedef struct
- {
- ElemType *base;
- ElemType *top;
- int StackSize;
- }SqStack;
- Status InitialStack(SqStack &S)//初始栈
- {
- S.base=new ElemType[MaxSize];
- if(!S.base) //存储分配失败
- return ERROR;
- S.top=S.base;
- S.StackSize=MaxSize;
- return OK;
- }
- Status Push(SqStack &S,ElemType e)//入栈,从栈顶插入新的元素
- {
- if(S.top-S.base==S.StackSize)//栈满
- return ERROR;
- *S.top++=e;
- return OK;
- }
- Status Pop(SqStack &S,ElemType &e)//出栈,删除栈顶元素
- {
- if(S.top==S.base)//栈空
- return ERROR;
- e=*S.top--;
- return OK;
- }
- int main()
- {
- SqStack S;
- char a,b;
- Status c;
- InitialStack(S);
- printf("输入要入栈的元素,以#结束输入\n");
- while(scanf("%c",&a)!=EOF)
- {
- if(a=='#')
- break;
- c=Push(S,a);
- if(c==ERROR)
- {
- printf("栈满\n");
- break;
- }
- }
- c=Pop(S,b);
- while(c==OK)
- {
- printf("%c\n",b);//从栈顶开始输出所有元素
- c=Pop(S,b);
- }
- return 0;
- }
复制代码
先谢过各位了
我调试了你的程序,发现问题在于第一个输入栈的数据无法输出出来,程序运行没有问题
你程序的问题在于初始化栈时,你将栈底地址赋予了栈顶,而出栈时又要求栈顶高于栈底时才能输出。
所以,只需要在初始化时将这一句
S.top=S.base;改为S.top=S.base+1;将栈顶的位置调高一点就可以成功运行
或者你也可以改变出栈的方式,但这就靠你自己去做了
|
|