迴圈鍊錶 線性表(5 15)

2021-07-02 14:57:12 字數 3058 閱讀 9972

練習:

建立乙個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,要實現將結點 ...