棧的鏈式儲存結構以及實現
阿新 • • 發佈:2019-01-09
上圖是棧的鏈式儲存結構(簡稱鏈棧)的模型圖,棧已經有了棧頂在頭部了,單鏈表中比較常用的頭結點也就失去了意義。
鏈棧的結構程式碼實現如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node
{
int data;//資料域
struct Node * pNext;//指標域
}NODE,*PNODE;
typedef struct Stack
{
PNODE top;//指向棧頂的指標
int count;//元素的個數
}Stack ,*PStack;
void createStack(PStack);//建立一個空的棧
bool push(PStack,int);//壓棧
bool pop(PStack,int *);//彈棧
void showStack(PStack);//列印棧的資訊
int main(void)
{
int m;
Stack stack;
createStack(&stack);
push(&stack,1);
push(&stack,2);
push(&stack,3);
showStack(&stack);
pop(& stack,&m);
showStack(&stack);
printf("彈出的棧頂元素是 %d\n",m);
return 0;
}
void createStack(PStack ps)
{
ps->top = NULL;
ps->count = 0;
}
bool push(PStack ps,int e)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));//生成一個新的節點
if(!pNew)
{
printf("動態記憶體分配失敗!\n");
exit(- 1);
}
pNew->data = e;
pNew->pNext = ps->top;
ps->top = pNew;//棧頂指向這個新的結點
ps->count++;
return true;
}
bool pop(PStack ps,int * pVal)
{
if(ps->top == NULL)
{
return false;
}
*pVal = ps->top->data;
PNODE q = ps->top;
ps->top = ps->top->pNext;
ps->count--;
free(q);
q = NULL;
return true;
}
void showStack(PStack ps)
{
PNODE p = ps->top;
while(p != NULL)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
}