1. 程式人生 > >棧的鏈式儲存結構以及實現

棧的鏈式儲存結構以及實現

這裡寫圖片描述
上圖是棧的鏈式儲存結構(簡稱鏈棧)的模型圖,棧已經有了棧頂在頭部了,單鏈表中比較常用的頭結點也就失去了意義。
鏈棧的結構程式碼實現如下:

#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"); }