数据结构--链栈

数据结构–链栈

代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
#define ERROR 0
#define OK 1
typedef struct node                                                       //定义结点                                               
{
  ElemType date;
  struct node *next;
}LinkStack;
int menu()                                                                 //菜单
{
  int i;
  printf("=============链栈==================\n");
  printf("========1.初始化链栈===========\n");
  printf("========2.链栈进栈操作===========\n");
  printf("========3.链栈出栈操作===========\n");
  printf("========4.读取栈顶元素===========\n");
  printf("========5.判空链栈=============\n");
  printf("please input your action (1--5):\n");
  scanf("%d",&i);
  return i;
}
int *initstack()                                                     //链栈初始化
{
   LinkStack *S;
   S=(LinkStack *)malloc(sizeof(LinkStack));
   S->next=NULL;
   printf("初始化成功\n");
   return S;
}
int push(LinkStack *S,int n)                                         //元素进栈
{
   LinkStack *p;
   p=(LinkStack *)malloc(sizeof(LinkStack));
   p->date=n;
   p->next=S->next;
   S->next=p;
   return OK;
}
int pop(LinkStack *S,int *e)                                        //元素出栈
{
   LinkStack *p;
   if(S->next==NULL)
    return ERROR;
   p=S->next;
   *e=p->date;
   S->next=p->next;
   free(p);
   return OK;
}
int gettop(LinkStack *S,int *e)                                    //取栈顶元素
{
     LinkStack *p;
   if(S->next==NULL)
	   return ERROR;
   p=S->next;
   *e=p->date;
   return OK;

}
int stackempty(LinkStack *S)                                         //判空操作
{
	if(S->next==NULL)
	 return OK;
	else 
		return ERROR;
}
int main()                                                            //主函数                                                         
{
    LinkStack *S;
	int n,b,*e;
	while(1)
	{
	  b=menu();
	  switch(b)
	  {
	     case 1:system("cls");
			 	S=initstack();
				break;
		 case 2:system("cls");
			 printf("请输入您要加入的元素\n");
			 scanf("%d",&n);
			   b=push(&S,n);
			   if(b==1)
				   printf("入栈成功\n");
				break;
		 case 3:system("cls");
			  b=pop(&S,&e);
				  if(b==1)
				   printf("出栈成功\n");
				  else 
					  printf("出栈失败\n");
				  printf("出栈元素为%d\n",e);
			   break;
		 case 4:system("cls");
			 b=gettop(&S,&e);
			 if(b==1)
				   printf("取元素成功\n");
			 else 
				   printf("取元素失败\n");
				   printf("元素为%d\n",e);
			  break;
		 case 5:system("cls");
			    b=stackempty(&S); 
				if(b==1)
				   printf("链栈为空\n");
				  else 
					  printf("链栈不为空\n");
			   break;
	  }
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大菜彩

家人们鼓励鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值