練習:
建立乙個n個節點環形鍊錶(不包含頭節點),然後輸出這個環形鍊錶
例如:
linknode *create_loop_linklist(int n)
int printf_loop_linklist(linknode *p)
**如下:
#include #include typedef int datatype;
typedef struct node
linknode;
linknode *create_loop_linklist(int n)
p->next = head;
return head;
}int printf_loop_linklist(linknode *head)
printf("%d\n",p->data);
return 0;
}int main(int argc, const char *argv)
一 線性表 -------------------- 棧
這裡的棧本質是一種線性表,但是它規定資料先進後出,也就是說一種線性表只要它遵從"先進後出"的原則,就可以
認為它是棧。
一般的使用原則:先儲存一些資料,到後面的時候才使用它,例如:介面的切換,表示式的計算...
1 + 3 * 5 + 6
思考:已知出棧的順序是1,2,3,4,問進棧順序可能是什麼
4,2,3,1
...
1.順序棧
typedef struct
seqstack;
seqstack *create_stack()
int is_empty_stack(seqstack *s)
int is_full_stack(seqstack *s)
int push_stack(seqstack *s,datatype data)
//將出棧元素返回
datatype pop_stack(seqstack *s)
datatype get_top_data(seqstack *s)
int main()
while(!is_empty_stack(s))
printf("\n");
return 0;
}
**如下:
#include #include typedef int datatype;
#define max 10
typedef struct
seqstack;
seqstack *create_empty_stack()
int is_empty_stack(seqstack *s)
int is_full_stack(seqstack *s)
int push_stack(seqstack *s,datatype data)
s->buf[s->top ++] = data;
return 0;
}datatype pop_stack(seqstack *s)
return s->buf[--s->top];
}datatype get_top_stack(seqstack *s)
int main(int argc, const char *argv)
printf("top data : %d\n",get_top_stack(s));
while(!is_empty_stack(s))
printf("\n");
return 0;
}
2.鏈式棧 = 棧頭 + 無頭的鍊錶
(1)棧中資料節點型別
typedef struct node
linknode;
(2)棧頭的型別
typedef struct
linkstack;
(3)建立乙個空棧
linkstack *create_empty_linkstack()
(4)進棧
int push_linkstack(linkstack *s,datatype data)
(5)出棧
datatype pop_stack(linkstack *s)
(6)判斷棧是否為空
int is_empty_linkstack(linkstack *s)
**如下:
#include #include typedef int datatype;
//棧中資料節點型別
typedef struct node
linknode;
//棧頭型別
typedef struct
linkstack;
linkstack *create_empty_linkstack()
int is_empty_linkstack(linkstack *s)
int push_linkstack(linkstack *s,datatype data)
datatype pop_linkstack(linkstack *s)
datatype get_top_linkstack(linkstack *s)
int main(int argc, const char *argv)
printf("top data : %d\n",get_top_linkstack(s));
while(!is_empty_linkstack(s))
printf("\n");
return 0;
}
線性表 迴圈鍊錶
迴圈鍊錶的定義 將單鏈表中最後乙個資料元素的next指標指向第乙個元素,即把鍊錶的兩頭連線,形成了乙個環狀鍊錶,稱為迴圈鍊錶 在迴圈鍊錶中可以定義乙個 當前 指標,稱為游標,通過游標來遍歷鍊錶中所有元素 迴圈鍊錶和動態鍊錶相比,唯一的不同就是迴圈鍊錶首尾相連,其他都完全一樣 可以用兩次列印迴圈鍊錶,...
線性表 迴圈鍊錶
迴圈鍊錶解決的是如何從當前的乙個結點出發,訪問到鍊錶的全部結點。在單鏈表中,有了頭結點,可以用o 1 的時間訪問第乙個結點,但對於最後乙個結點訪問需要o n 時間,就是相當於將單鏈表全部掃瞄一遍。對於迴圈列表不用頭指標,而是用指向終端結點的尾指標來表示迴圈鍊錶,也就是最後乙個結點就是尾指標作為返回,...
線性表 雙向迴圈鍊錶
雙向鍊錶 double liked list 就是在單向鍊錶的每個結點中,新增乙個指向前驅結點的指標域。class doublenode 雙向鍊錶迴圈帶頭結點的空鍊錶,如圖 非空的迴圈帶頭結點的雙向鍊錶,如圖 插入操作不複雜,不過順序很重要,不要寫反了。假設儲存元素 e 的結點為 s,要實現將結點 ...