VC++6 顺序栈,请大佬帮帮忙

#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一下返回值就行了...栈的打印我给你写好了