棧的鏈表存儲實現(純程式碼演示)
一點廢話
昨天寫的線性表的鏈表存儲弄得我自己突然來了想法,打算把上學期自己學的數據結構的知識好好複習一下。
也正好打算從WordPress的自建部落格慢慢遷移到部落格園來,好好熟悉一下這個cnblogs的編輯器。(事實證明,好的文章排版是非常重要的)
目前的計劃是「線性表->堆棧->隊列->樹->圖」,這些基本的數據結構弄完之後,就準備開始弄一下基本的排序演算法,啊哈哈哈
文件概述
- stack.h 存放棧(棧結點結構以及結點指針),並對棧的操作函數進行聲明
- stack.c 對之前在stack.h中聲明的棧的操作函數進行定義
程式碼
stack.h
typedef int ElementType; typedef struct SNode *Stack; struct SNode{ Stack Next; ElementType Data; }; //Stack has header-Node Stack CreateStack(); //生成空堆棧 void Push(Stack S,ElementType item); //將元素 item 壓入堆棧 int IsEmpty(Stack S); //判斷堆棧 S 是否為空 ElementType Pop(Stack S); //刪除並返回棧頂元素
stack.c
#include <stdio.h> #include <stdlib.h> #include "stack.h" //生成空堆棧 Stack CreatStack(){ Stack tempStack = (Stack)malloc(sizeof(struct SNode)); tempStack->Next = NULL; return tempStack; } //判斷是否為空 int IsEmpty(Stack S){ return (S->Next == NULL); } //將元素 item 壓入堆棧 void Push(Stack S,ElementType item){ Stack tempStack = (Stack)malloc(sizeof(struct SNode)); tempStack->Data = item; tempStack->Next = S->Next; S->Next = tempStack; } //刪除並返回棧頂元素 ElementType Pop(Stack S){ if(IsEmpty(S)){ printf("Error"); return; } Stack tempStack = S->Next; ElementType popValue = tempStack->Data; S->Next = tempStack->Next; free(tempStack); return popValue; }