下邊的實現,預設在鏈棧中設定乙個頭結點,用於指向棧的第乙個元素
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...