Kalagala 2021-06-08 22:39 采纳率: 0%
浏览 49

我这个栈系统为什么显示不了出栈不了最后一个元素【c语言】

#include<stdio.h>
#include<malloc.h>
#define MAXSIEZE
typedef int DataType;
typedef struct stacknode
{
	DataType data;
	struct stacknode *next;
} LinkStack ;

LinkStack *InitStack()
{
	LinkStack *S;
	S=NULL;
	return S;
}

int EmptyStack(LinkStack *S)
{
	if(S==NULL)
	return 1;
	else
	return 0;
}

LinkStack *Push(LinkStack *S,DataType x)
{
	LinkStack *p;
	p=(LinkStack *)malloc(sizeof(LinkStack));
	p->data=x;
	p->next=S;
	S=p; 
	return S;	
}

LinkStack *Pop(LinkStack *s,DataType *x)
{
	LinkStack *p;
	if(EmptyStack(s))
	{
		printf("栈空,不能出栈");
		return NULL; 
	}
	else
	{
		*x=s->data;
		p=s;
		s=s->next;
		free(p);
		return s;
	}
}

int GetTop(LinkStack *s,DataType *x)
{
	if(EmptyStack(s))
	{
		printf("栈空");
		return 0; 
	}
	else
	{
		*x=s->data;
		return 1;
	}
 } 


void ShowStack(LinkStack *s)
{
	LinkStack *p=s;
	if(p==NULL)
	printf("\t栈空");
	else
	{
		printf("从栈顶元素起栈中元素为; ");
		while(p!=NULL)
		{
			printf("%d",p->data) ;
			p=p->next;
		}
	 } 
}


void DB(LinkStack *s ,DataType x)
{
	while(x)
	{
		s=Push(s,x%2);
		x/=2;
	}
	printf("转换后的二进制数为; ");
	while(!EmptyStack(s))
	{
		s=Pop(s,&x);
		printf("%d",x);
	}
}

void menu()
{
	printf("\n[             栈子系统                ]");
	printf("\n=======================================");
	printf("\n[          1 初始化栈                 ]");
	printf("\n[          2 入栈操作                 ]");
	printf("\n[          3 出栈操作                 ]");
	printf("\n[          4 求栈顶元素               ]");
	printf("\n[          5 显示栈中元素             ]");
	printf("\n[          6 十,二进制转换           ]");
			printf("\n请输入菜单号(0--6)");	
}




main()
{
	int i,n,flag;
	LinkStack *s;
	DataType x;
	char ch1,ch2,a;
	ch1='y';
	while(ch1=='y'||ch1=='Y')
	{
		menu();
		scanf("%c",&ch2);
		getchar();
		switch(ch2)
		{
			case'1':
			s=InitStack();
			printf("栈的初始化完成");
			break;
			case'2':
				printf("请输入要入栈的元素个数");
				scanf("%d",&n);
				printf("请输入%d个整数进行入栈",n);
				for(i=0;i<n;i++)
			{
				
				scanf("%d",&x);
				s=Push(s,x);
			}
			printf("入栈成功");
			break;
			case'3':
			printf("请输入要进行出栈的元素个数;");
			scanf("%d",&n);
			printf("出栈的元素为:"); 
				for(i=0;i<n;i++)
			{
				s=Pop(s,&x);
				if(s!=NULL)
				printf("%5d",x);
			}
			break;
			case'4':
				if(flag=GetTop(s,&x))
				printf("当前栈顶元素为%d",x);
				break;
			case'5':
			ShowStack(s);
			break;
			case'6':
			s=InitStack();
			printf("请输入整数:");
			scanf("%d",&x);
			DB(s,x);
			break;
			case'0':
				ch1='n';
				break;
				default:
				printf("请重新输入整数(0-5)");
		 } 
		 if(ch2!='0') 
		 {
		 	printf("\n按回车继续,任意键返回主菜单\n");
		 	a=getchar();
		 	if(a!='\xA')
		 	{
		 		getchar();
		 		ch1='n';
			 }
		 }
	}
}

出栈到最后一位时不显示

入栈3个元素1 2 3

出栈3个元素 只能看见3 2

结果难道不应该是3 2 1 吗?

再出栈一个发现栈空

 

怎么才能显示出栈的所有元素

  • 写回答

2条回答 默认 最新

  • Kalagala 2021-06-08 22:42
    关注

    int EmptyStack(LinkStack *S)
    {
        if(S==NULL)
        return 1;
        else
        return 0;
    }

    LinkStack *Push(LinkStack *S,DataType x)
    {
        LinkStack *p;
        p=(LinkStack *)malloc(sizeof(LinkStack));
        p->data=x;
        p->next=S;
        S=p; 
        return S;    
    }

    LinkStack *Pop(LinkStack *s,DataType *x)
    {
        LinkStack *p;
        if(EmptyStack(s))
        {
            printf("栈空,不能出栈");
            return NULL; 
        }
        else
        {
            *x=s->data;
            p=s;
            s=s->next;
            free(p);
            return s;
        }
    }

    这是其他输入输出的代码

    评论

报告相同问题?

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析