使用鍊錶實現棧(C語言)

2021-07-29 22:53:21 字數 1036 閱讀 4171

下邊的實現,預設在鏈棧中設定乙個頭結點,用於指向棧的第乙個元素

typedef

char datatype;

typedef

struct nodelstacknode,*linkstack;

void initstack(linkstack *top)

// 將頭結點的指標域置為空

(*top)->next = null;

}// 判斷棧是否為空

int stackempty(linkstack top)else

}// 將元素入棧:需要為入棧的結點分配記憶體

int pushstack(linkstack top,datatype e)

p->data = e;

p->next = top->next;

top->next = p;

return1;}

// 將元素出棧:需要釋放結點空間

int popstack(linkstack top,datatype *e)

top->next = p->next;

*e = p->data;

free(p);

return1;}

// 取棧頂元素:需要對邊界做判斷(棧是否為空)

int gettop(linkstack top,datatype *e)

*e = p->data;

return1;}

int stacklength(linkstack top)

return i;

}// 銷毀鏈棧:需要釋放動態分配的結點空間

void destorystack(linkstack top)

}

1 進製轉換:例如十進位制轉八進位制,不斷除以8,儲存餘數,直到商為0,從下往上取餘數。可以使用棧儲存餘數,再依次取出 

2 括號配對:假如是括號的左邊,就入棧;當遇到括號的右邊,就出棧乙個元素,比較是否配對;配對就繼續上一步,不配對就退出

C語言鍊錶實現棧

鍊錶實現帶頭結點的棧,入棧用頭插法 環境codeblocks include include include typedef int elemtype typedef struct node node,linkstack 初始化棧 linkstack initstack linkstack s 入棧...

棧的鍊錶實現(C語言)

原始碼檔案位址 由前面 所述 鍊錶實現的棧在操作過程中頻繁的pop和push會伴隨著頻繁的malloc和free,伴隨著很大的系統開銷。基於此,在此實現中,通過實現乙個空閒節點鍊錶,將pop之後的鍊錶節點不釋放,而是放入空閒鍊錶freenodeptr中 當棧進行push操作的時候,先從空閒節點鍊錶中...

C語言 棧 鍊錶

普通鍊錶的建立 用鍊錶構建一串數字,並輸入另乙個數插入其中。以及鍊錶的逆序。include include struct node 鍊錶的結構體建立 int main t head k head next scanf d s for i 0 i i else struct node x,y x he...