#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define NULL 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int ElemType;
int visit(ElemType e);
typedef struct {
ElemType* data;
int top;
int stacksize;
}SqStack;
int InitStack(SqStack& S) {
S.data = new ElemType[STACK_INIT_SIZE];
if (!S.data)exit(OVERFLOW);
S.top = -1;
S.stacksize = STACK_INIT_SIZE;
return OK;
}//初始化
int Push(SqStack& S, ElemType e) {
ElemType* p;
if (S.top >= S.stacksize - 1) {
p = (ElemType*)realloc(S.data, (S.stacksize + STACKINCREMENT) * sizeof(ElemType));
if (!p)exit(OVERFLOW);
S.data = p;
S.stacksize = S.stacksize + STACKINCREMENT;
}
S.data[++S.top] = e;
return OK;
}//进栈操作
int Pop(SqStack& S, ElemType& e) {
if (S.top == -1)return ERROR;
e = S.data[S.top--];
return OK;
}//出栈操作
int StackEmpty(SqStack S) {
if (S.top == -1)return OK;
return ERROR;
}//判断是否为空栈
int StackLength(SqStack S) {
return S.top == -1;
}//长度
void DestroyStack(SqStack& S) {
delete S.data;
}//销毁
int StackTraverse(SqStack S, int(*visit)(ElemType)) {
while (S.top != -1){
visit(S.data[S.top--]);}
return OK;
}
void main() {
ElemType e;
SqStack S;
printf("(1)初始化顺序栈\n");
InitStack(S);//初始化
printf("(2)判断顺序栈是否为空\n");
StackEmpty(S);//判空
printf("(3)依次将元素a,b,c,d,e进栈\n");
Push(S, 'a');
Push(S, 'b');
Push(S, 'c');
Push(S, 'd');
Push(S, 'e');//进栈
printf("(4)判断顺序栈是否为空\n");
StackEmpty(S);//判空
printf("(5)输出顺序栈长度\n");
StackLength(S);//输出长度
printf("(6)输出从栈顶到栈底的元素\n");
StackTraverse(S,visit);//
printf("(7)输出出顺序栈序列\n");
Pop(S, e);//输出序列
printf("(8)判断顺序栈S是否为空:\n");
StackEmpty(S);//判空
printf("(9)释放顺序栈S\n");
DestroyStack(S);
}
什么问题
stracktraverse那个报错,你可以试一下,我也不知道哪儿有问题
大哥你visit没函数体啊
那怎么改啊
大佬帮忙改改吧
int visit(ElemType e){ return e; } // 你把这行代码拷进去 就能运行..
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define NULL 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int ElemType; int visit(ElemType e); int visit(ElemType e){ printf("%d", e); return e; } typedef struct { ElemType* data; int top; int stacksize; }SqStack; int InitStack(SqStack& S) { S.data = new ElemType[STACK_INIT_SIZE]; if (!S.data)exit(OVERFLOW); S.top = -1; S.stacksize = STACK_INIT_SIZE; return OK; }//初始化 int Push(SqStack& S, ElemType e) { ElemType* p; if (S.top >= S.stacksize - 1) { p = (ElemType*)realloc(S.data, (S.stacksize + STACKINCREMENT) * sizeof(ElemType)); if (!p)exit(OVERFLOW); S.data = p; S.stacksize = S.stacksize + STACKINCREMENT; } S.data[++S.top] = e; return OK; }//进栈操作 int Pop(SqStack& S, ElemType& e) { if (S.top == -1)return ERROR; e = S.data[S.top--]; return OK; }//出栈操作 int StackEmpty(SqStack S) { if (S.top == -1)return OK; return ERROR; }//判断是否为空栈 int StackLength(SqStack S) { return S.top == -1; }//长度 void DestroyStack(SqStack& S) { delete S.data; }//销毁 int StackTraverse(SqStack S, int(*visit)(ElemType)) { while (S.top != -1){ visit(S.data[S.top--]); } return OK; } void main() { ElemType e; SqStack S; printf("(1)初始化顺序栈\n"); InitStack(S);//初始化 printf("(2)判断顺序栈是否为空\n"); StackEmpty(S);//判空 printf("(3)依次将元素a,b,c,d,e进栈\n"); Push(S, 'a'); Push(S, 'b'); Push(S, 'c'); Push(S, 'd'); Push(S, 'e');//进栈 printf("(4)判断顺序栈是否为空\n"); StackEmpty(S);//判空 printf("(5)输出顺序栈长度\n"); StackLength(S);//输出长度 printf("(6)输出从栈顶到栈底的元素\n"); StackTraverse(S, visit);// printf("(7)输出出顺序栈序列\n"); Pop(S, e);//输出序列 printf("(8)判断顺序栈S是否为空:\n"); StackEmpty(S);//判空 printf("(9)释放顺序栈S\n"); DestroyStack(S); }
可以了
是不是还少什么,我是不是没写输出?
那你printf一下咯
具体怎么写呢
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define NULL 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int ElemType; int visit(ElemType e); int visit(ElemType e){ printf("%d", e); return e; } typedef struct { ElemType* data; int top; int stacksize; }SqStack; int InitStack(SqStack& S) { S.data = new ElemType[STACK_INIT_SIZE]; if (!S.data)exit(OVERFLOW); S.top = -1; S.stacksize = STACK_INIT_SIZE; return OK; }//初始化 int Push(SqStack& S, ElemType e) { ElemType* p; if (S.top >= S.stacksize - 1) { p = (ElemType*)realloc(S.data, (S.stacksize + STACKINCREMENT) * sizeof(ElemType)); if (!p)exit(OVERFLOW); S.data = p; S.stacksize = S.stacksize + STACKINCREMENT; } S.data[++S.top] = e; return OK; }//进栈操作 int Pop(SqStack& S, ElemType& e) { if (S.top == -1)return ERROR; e = S.data[S.top--]; return OK; }//出栈操作 int StackEmpty(SqStack S) { if (S.top == -1)return OK; return ERROR; }//判断是否为空栈 int StackLength(SqStack S) { return S.top == -1; }//长度 void DestroyStack(SqStack& S) { delete S.data; }//销毁 int StackTraverse(SqStack S, int(*visit)(ElemType)) { while (S.top != -1){ visit(S.data[S.top--]); } return OK; } void show(SqStack & S){ for (int i = 0; i <= S.top; i++){ printf("%d ", S.data[i]); } printf("\n"); } void main() { ElemType e; SqStack S; printf("(1)初始化顺序栈\n"); InitStack(S);//初始化 show(S); printf("(2)判断顺序栈是否为空\n"); StackEmpty(S);//判空 show(S); printf("(3)依次将元素a,b,c,d,e进栈\n"); Push(S, 'a'); Push(S, 'b'); Push(S, 'c'); Push(S, 'd'); Push(S, 'e');//进栈 show(S); printf("(4)判断顺序栈是否为空\n"); StackEmpty(S);//判空 show(S); printf("(5)输出顺序栈长度\n"); StackLength(S);//输出长度 printf("(6)输出从栈顶到栈底的元素\n"); StackTraverse(S, visit);// printf("(7)输出出顺序栈序列\n"); Pop(S, e);//输出序列 printf("(8)判断顺序栈S是否为空:\n"); StackEmpty(S);//判空 printf("(9)释放顺序栈S\n"); DestroyStack(S); }
其他判断的话.... 你printf一下返回值就行了...栈的打印我给你写好了