链表栈的实现

链表栈,简称链栈,它是用一组不连续的存储结构来存储栈元素的线性表,主要通过指针实现其线性。

1.主要掌握两个结构体。

struct node
{
datatype  data;
node *next;
};
struct stack
{
node *top;
};
第一个为结点结构体,第二个为栈结构体。这里需要注意的是跟数组实现的栈的区别,即数组实现的栈顶通过int型的变量top来表征,而链栈的栈顶是指向栈的第一个结点,且通过node型的指针来实现。

2.初始化栈是给top赋值为空,即s->top == NULL;

3.对于栈主要的操作是进栈和出栈。其主要的实现代码均可参考如下代码:

#include<iostream>
using namespace std;
typedef int datatype;
struct node
{
       datatype data;
       node *next;
};
struct stack
{
       node *top;
};
// init stack
void initstack(stack *s)
{
     s->top = NULL;
}
// push stack
int push(stack *s, datatype x)
{
    node *p = (node*)malloc(sizeof(node));
    p->data = x;
    p->next = s->top;
    s->top = p;
    return 0;
}
// creat stack
stack * creatstack(int n)
{
      stack *p = new stack;
      initstack(p);
      for(int i = 0; i < n; i++)
      {
              datatype x;
              cin >> x;
              push(p, x);
      }
      return p;
}
// pop stack
stack * pop(stack *s, datatype data1)
{
      if(s->top == NULL)
      return NULL;
      data1 = s->top->data;
      node *p = s->top;
      s->top = s->top->next;
      free(p);
      return s;
}
// print stack
int show(stack *s)
{
     if(s->top == NULL)
     return -1;
     node *r = s->top;
     while(s->top != NULL)
     {
                  cout << s->top->data << ends;
                  s->top = s->top->next;
     }
     cout << endl;
     s->top = r;
     return 0;
}
int main()
{
    stack * q = creatstack(4);
    show(q);
    datatype y;
    pop(q, y);
    show(q);
    system("pause");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值