棧
棧(stack)是限定僅在表尾進行插入或者刪除的線性表,表尾端稱爲棧頂(top),表頭端稱爲棧底(bottom)。棧有時又叫做先進後出的線性表,棧的基本操作有進棧(push)和出棧(pop),前者相當於插入,而後者則是刪除最後插入的元素。如圖
棧有兩種存儲方法:一種使用數組,另一種是使用單鏈表。
棧的順序表示
typedef struct stack
{
int top;
int data[MAXSIZE];
}stack;
順序棧的進棧出棧
void push(stack *s,int e)
{
if(s->top==MAXSIZE-1)
return ;
s->top++;
s->data[s->top]=e;
return ;
}
void pop(stack *s,int *e)
{
if((s->top)==-1)
return;
*e = s->data[s->top];
s->top--;
return;
}
棧的單鏈表實現
鏈棧是沒有附加頭結點的運算受限的單鏈表,棧頂指針就是鏈表的頭指針。
鏈棧的實現爲
typedef struct stackNode
{
int data;
struct stackNode *next;
}stackNode, *stackList;
void push(stackList s,int e)
{
stackList tmp;
tmp =(stackList)malloc(sizeof(stackNode));
if(tmp==NULL)
printf("Out of space");
else
{
tmp->data =e;
tmp->next=s->next;
s->next=tmp;
}
return ;
}
void pop(stackList s)
{
stackList tmp;
if(s->next==NULL)
return;
else
{
tmp=s->next;
s->next=s->next->next;
free(tmp);
}
}