user-0 提问: 帮忙看个数据结构的题目，谢谢啦，在线等

回复:
user: user-1
content: 引用 8 楼 u010553752 的回复:求解输出栈出了什么问题，怎么会这样  输出那样的原因是scanf的原因，改用cin、cout方便一些

user: user-2
content: LinkStack   *S; char e; int i; InitStack_LS(*S); StackEmpty(*S);  请问S指向了哪里？你这样上去就要用*S？我稍微修改了下你的程序，你需要的功能应该是都能实现了，但是不建议这样做，没有什么实用价值，而且说实话你这个程序很混乱。我修改的地方后面都用这个标了//==>  /*1.参照教材编写一个程序，实现链栈的各种基本运算，并设计一个主程序完成如下功能：  （1）初始化栈s； （2）判断栈s是否非空； （3）依次进栈元素s，o，f，t，w，a，r，e； （4）判断栈s是否非空；  （5）输出栈长度；	 （6）输出从栈顶到栈底元素； （7）输出出栈序列；  （8）判断栈s是否非空；  （9）释放栈   我写了这个C程序，怎么运行不起来，好像死循环了，求大神帮忙看看*/ #include <stdio.h> #include <malloc.h> #include<stdlib.h>  #define OK 1 #define ERROR 0  typedef  struct  SLNode{            	char   data; 	struct  SLNode *next; }SLNode,* SLink;  typedef struct Stack { 	SLink  top; 	int  length; }STACK,LinkStack;   int InitStack_LS( LinkStack  &S){    //初始化 	S.top=NULL; 	S.length=0; 	printf("已初始化!\n");  //==> 	return OK; } void StackEmpty(LinkStack &S){ //判断栈s是否非空 	if(S.length==0){		//==> 		printf("空栈!\n"); 	}else{ 		printf("非空栈!\n"); 	}  } int Push(LinkStack  &S,char e){       //入栈 	SLink p; 	p=new SLNode; 	p->data=e; 	p->next=S.top;				 	S.top=p; 	S.length++; 	return OK; }  int Pop(LinkStack  &S,char *e){    //出栈  //==> 	*e=S.top->data; 	SLink p=S.top; 	S.top=S.top->next; 	delete p; 	S.length--; 	return OK; }  int  main(){ 	LinkStack   S; 	char e; 	int i; 	InitStack_LS(S); 	StackEmpty(S); 	for(i=0;i<9;i++){ 		printf("请输入第%d个入栈的字母:",i+1); 		scanf("\n%c",&e);					//==> 		Push(S,e); 	} 	printf("已全部入栈!\n"); 	printf("此链栈的长度为:%d",S.length);      //==> 	printf("\n"); 	for(i=0;i<9;i++){          //输出栈 		int f=Pop(S,&e); 		printf("%d\t%c\n",i+1,e);		//==> 	} 	StackEmpty(S);   //判断栈是否为空 	 	//free(S);  //销毁栈 }

user: user-2
content: 哥哥，这个是C程序？我愣是看不出来C里面还跑出引用来了！

user: user-0
content: 求解输出栈出了什么问题，怎么会这样

user: user-0
content: 请问我的出栈函数有问题吗？怎么运行时起来是这样的

user: user-3
content: void StackEmpty(LinkStack &S) { // 清空栈S     SLink temp, p = S.top;     while (p != NULL) {         temp = p;         p = p->next;         delete temp;     }     S.top = NULL; }

user: user-3
content: bool StackEmpty(LinkStack &S){ //判断栈s是否非空     if(S.top==NULL){         printf("空栈!\n");     }else{         printf("非空栈!\n");     }     return S.top == NULL; }

user: user-0
content: 能运行到时现实不了题目的效果，肿么改

user: user-1
content: 楼上的代码已经给你测试通过了，注意46，49,54行给你改了

user: user-1
content: #include <stdio.h> #include <malloc.h> #include<stdlib.h>  #define OK 1 #define ERROR 0  typedef  struct  SLNode{            	char   data; 	struct  SLNode *next; }SLNode,* SLink;  typedef struct Stack { 	SLink  top; 	int  length; }STACK,LinkStack;   int InitStack_LS( LinkStack  &S){    //初始化 	S.top=NULL; 	S.length=0; 	return OK; 	printf("已初始化!\n"); } void StackEmpty(LinkStack &S){ //判断栈s是否非空 	if(&S==NULL){ 		printf("空栈!\n"); 	}else{ 		printf("非空栈!\n"); 	}  } int Push(LinkStack  &S,char e){       //入栈 	SLink p; 	p=new SLNode; 	p->data=e; 	p->next=S.top; 	S.top=p; 	S.length++; 	return OK; }  int Pop(LinkStack  &S,char e){    //出栈 	e=S.top->data; 	SLink p=S.top; 	S.top=S.top->next; 	delete p; 	S.length--; 	return OK; }  void main(){ 	LinkStack   S; 	char e; 	int i; 	InitStack_LS(S); 	StackEmpty(S); 	for(i=0;i<9;i++){ 		printf("请输入第%d个入栈的字母:",i+1); 		scanf("%c",&e); 		Push(S,e); 	} 	printf("已全部入栈!\n"); 	printf("此链栈的长度为:",S.length); 	printf("\n"); 	for(i=0;i<9;i++){          //输出栈 		int f=Pop(S,e); 		printf("%d\t%c\n",i+1,f); 	} 	StackEmpty(S);   //判断栈是否为空 	//free(S);  //销毁栈 }

user: user-3
content: 用的引用？C++？ LinkStack   *S;//没有赋初值，建议改成LinkStack S;其余地方相应修改