鏈表棧,簡稱鏈棧,它是用一組不連續的存儲結構來存儲棧元素的線性表,主要通過指針實現其線性。
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;
}