要求:
有帶頭節點的單鏈表l,編寫演算法實現從尾到頭反向輸出每個結點的值。
分析:這裡有一種思路是利用棧,在正向遍歷單鏈表的時候進行入棧,然後遍歷完成之後依次出棧,既可實現反向輸出。
既然可以用棧,那麼也可以用遞迴的方式來實現。然而遞迴是利用的棧,實質上是相同的。
遞迴的時候,系統需要設立乙個「工作棧」作為整個遞迴函式執行期間使用的資料儲存區。每遞迴一次,則需要入存實在引數,所有區域性變數以及上一層的返回位址等資訊。這樣一來,遞迴的效率遠不如直接用棧實現。
下面給出了利用棧實現該功能的**。
#include#include#define stack_innit_size 20
#define stackincrment 5
struct sqstack//棧
;struct lnode//鍊錶結點
;int initstack(struct sqstack *s)//構造空棧
int push(struct sqstack *s,int e)//入棧
*(s->top) = e;
s->top++;
return 1;
}int pop(struct sqstack *s)//刪除棧頂元素,並返回
s->top--;
int e = *(s->top);
return e;
}int init(struct lnode *l, int i)
int i;
while(s.top!=s.base)
return 0;
}int main()
1 資料結構 線性結構之單鏈表
一 定義 單向鍊錶 單鏈表 時鍊錶的一種,它由節點組成,每個節點都包含下乙個節點的指標。1 定義節點類 定義節點類 struct node 2 定義單鏈錶類class slist 二 實現 單鏈表的實現方式有很多種,常見的有 1 帶頭結點的單鏈表 2 不帶頭結點的單鏈表 3 帶頭節點和尾節點的單鏈表...
資料結構 單鏈表實現線性佇列
隊空條件 fron rear null 隊滿條件 不考慮 進隊操作 將新的節點插入到鍊錶尾。出隊操作 刪除鍊錶第乙個節點。注意出隊和入隊操作 入隊操作要考慮到兩種情況 1入隊前,隊為空時,隊首和隊尾指標都指向新的節點。2.入隊後,隊不為空,只動隊尾指標就行。出隊操作要考慮三種情況 1.原隊為空,則返...
資料結構單鏈表
初學資料結構,貼段自己編寫的單鏈表程式,希望自己能夠一直以強大的學習熱情持續下去!自勉!2012年3月30日 於大連 include using namespace std typedef struct node linklist,node linklist makelist int n void ...