鏈表棧的實現

鏈表棧,簡稱鏈棧,它是用一組不連續的存儲結構來存儲棧元素的線性表,主要通過指針實現其線性。

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;
}


發佈了40 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章