数据结构之链栈的所有操作

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct node
{
 struct node * next;
 int data;
}Node,*PNode;//定义节点类型

typedef struct stack
{
 PNode top;
 PNode bottom;
}Stack,*PStack;//定义栈类型。

void init_stack(PStack ps);
int isEmpty(PStack ps);
void push(PStack ps,int val);
void pop(PStack ps);
void traversal(PStack ps);

int main()
{
 PStack stack = (PStack) malloc(sizeof(Stack));
 init_stack(stack);
 isEmpty(stack);
 push(stack,1);
 push(stack,2);
 traversal(stack);
 pop(stack);
 push(stack,3);
 push(stack,4);
 traversal(stack);
 printf("%d\n",isEmpty(stack));
 return 0;
}

//初始化栈
void init_stack(PStack ps)
{
 PNode pnew =(PNode) malloc(sizeof(Node));
 if(pnew==NULL)
 {
  printf("初始化栈失败!\n");
  exit(-1);
 }
 printf("初始化栈开始:\n");
 ps->top=ps->bottom=pnew;
 pnew->next=NULL;
 printf("初始化栈成功!\n");
}

//判断栈是否为空
int isEmpty(PStack ps)
{
 if(ps->top==ps->bottom)
 {
  printf("栈为空!\n");
  return 1;
 }
 else
 {
  printf("栈不为为空!\n");
  return 0;
 }
}

//进栈
void push(PStack ps,int val)
{
 PNode pnew = (PNode) malloc(sizeof(Node));
 pnew->data = val;
 pnew->next = ps->top;
 ps->top = pnew;
 printf("进栈成功!\n");
}

//出栈
void pop(PStack ps)
{
 if(isEmpty(ps))
 {
  printf("栈为空!\n");
  exit(-1);
 }
 else
 {
  PNode pnew = ps->top;
  ps->top=ps->top->next;
  free(pnew);
  printf("出栈成功!\n");
 }
}

//遍历
void traversal(PStack ps)//传的是栈的地址,所以不能通过再定义一个栈变量来遍历(遍历的过程中实际上还是改变栈的值),
{
 /*PStack psn = ps;
 printf("栈遍历开始:\n");
 while(!isEmpty(psn))
 {
  printf("%d\n",psn->top->data);
  psn->top=psn->top->next;
 }
 printf("栈遍历结束:\n");**/
 PNode pnew = ps->top;
 printf("栈遍历开始:\n");
 while(pnew!=ps->bottom)
 {
  printf("%d\n",pnew->data);
  pnew=pnew->next; 
 }
 printf("栈遍历结束:\n");
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值