链式栈——在线性表表头操作的一种存储结构还是在线性表表尾操作的一种结构?

#include<stdio.h>
#include<stdlib.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;

LinkStack top;

LinkStack PushStack(LinkStack top,int x)    //入栈
{
LinkStack s;
s=(LinkStack)malloc(sizeof(SNode));
s->data=x;
s->next=top;
top=s;
return top;
}

LinkStack PopStack(LinkStack top)               //退栈
{
LinkStack p;
if(top!=NULL)
{
p=top;
top=top->next;
free(p);
printf("退栈已完成\n");
return top;
}
else printf("栈是空的,无法退栈!\n"); return 0;
}
int GetStackTop(LinkStack top)            //取栈顶元素
{
 return top->data;
 
}
bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型



{
        return top==NULL ? true:false;
}
void Print()
{
      SNode *p;
      p=top;
      if(IsEmpty())
      {
            printf("The stack is empty!\n");
            return;
      }
while(p)
      {
             printf("%d ", p->data);
             p=p->next;
       }
       printf("\n");
}


void main()
{   
	 
    int x,a,b;
    char m;
do {       printf("\n");
           printf("###############链栈的基本操作##################\n");
           printf("××××××××1.置空栈××××××××××\n");
           printf("××××××××2.进栈×××××××××××\n");
           printf("××××××××3.退栈×××××××××××\n");
           printf("××××××××4.取栈顶元素××××××××\n");
           printf("××××××××5.退出程序×××××××××\n");
           printf("##############################################\n");
           printf("\n请选择一个字符:");
		   scanf("%c",&m);
switch(m){
   case '1': 
	        top=NULL;
			printf("\n栈已置空!");
	        break;
   case '2':  
	         printf("\n请输入要进栈的元素个数是:");
             scanf("%d",&a);
             printf("\n请输入要进栈的%d个元素:",a);
     for(b=0;b<a;b++) {       
	      scanf("%d",&x);
          top=PushStack(top,x); }
 	      printf("进栈已完成!\n");
          printf("\n输出栈为:");
	      Print();
	      break;
   case '3': 
            printf("\n操作之前的输出栈为:");
			Print();
	        top=PopStack(top);
            printf("\n操作过后的输出栈为:");
	        Print();
	        break;
   case '4': 
            printf("\n输出栈为:");
            Print();
	   if(top!=NULL) 
			printf("\n栈顶元素是:%d\n",GetStackTop(top));
         else 
			printf("\n栈是空的,没有元素!");
		    break;
   case '5':break;
   default: 
	       printf("\n输入的字符不对,请重新输入!");
	       break;
		
		}
          getchar();
	}while(m!='5');
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值