資料結構(C語言版)學習筆記(第三章 棧和佇列)

2021-10-09 20:45:53 字數 3481 閱讀 5231

鏈棧的定義與基本操作

佇列(queue)

鏈式佇列的定義與基本操作

初始化鏈式佇列以及佇列的判空

因為棧本質上也是線性表,所以有順序儲存和鏈式儲存兩種儲存方式

typedef

int elemtype;

#define maxsize 10

//定義棧中元素的最大個數

typedef

struct

seqstack;

//初始化棧

void

initstack

(seqstack *s)

//判空

bool stackempty

(seqstack *s)

return false;

//不空

}

//入棧操作

bool push

(seqstack *s, elemtype e)

s->data[

++s->top]

= e;

//先將指向棧頂的指標+1,再入棧

return true;

}

//出棧操作,返回元素e

bool pop

(seqstack *s,elemtype *e)

*e = s->data[s->top--];

//先出棧,再將棧頂指標-1

return true;

}

//讀取棧頂元素

bool gettop

(seqstack *s,elemtype *e)

*e = s->data[s->top]

;//獲取棧頂元素

return true;

}

typedef

int elemtype;

typedef

struct linknode

*lstack;

//棧型別定義

//初始化鏈棧(帶頭結點)

lstack initstack

(void

)int

main

(int argc,

const

char

* ar**)

//入棧操作(帶頭結點)

bool push

(lstack l,elemtype e)

p->data = e;

//將資料賦值給新節點的資料域中

p->next = l->next;

//新結點指向棧頂結點

l->next = p;

return true;

}

//出棧操作(帶頭結點)

bool pop

(lstack l,elemtype *e)

lnode *p = l->next;

//p代表即將出棧的結點

*e = p->data;

//獲取到出棧結點的元素值

l->next = p->next;

free

(p);

//將p刪除

return true;

}

因為佇列本質上也是線性表,所以有順序儲存和鏈式儲存兩種儲存方式。

typedef

int elemtype;

#define maxsize 10

//佇列中元素的最大個數

typedef

struct

seqqueue;

//初始化佇列

seqqueue initqueue

(void

)//判空

bool queueempty

(seqqueue *q)

else

}

//入隊操作

bool enqueue

(seqqueue *q,elemtype e)

q->data[q->rear]

= e;

//新元素入隊

q->rear =

(q->rear+1)

%maxsize;

//隊尾指向下乙個空間

return true;

}

//出隊操作

bool dequeue

(seqqueue *q,elemtype *e)

*e = q->data[q->front]

;//儲存元素

q->front =

(q->front+1)

%maxsize;

//對頭指向下乙個儲存單元

return true;

}

typedef

int elemtype;

typedef

struct linknodelinknode;

typedef

struct linkqueuelinkqueue;

//初始化鏈式佇列(帶頭結點)

void

initlinkqueue

(linkqueue *q)

//判空

bool queueempty

(linkqueue q)

return false;

}

//入隊操作

bool enqueue

(linkqueue *q,elemtype e)

p->data = e;

//將資料儲存在新結點中

p->next =

null

; q->rear->next = p;

//將新結點插入到尾結點後

q->rear = p;

//讓新插入的結點作為尾結點

return true;

}

//出隊操作

bool dequeue

(linkqueue *q,elemtype *e)

linknode *p = q->front->next;

//獲取到要出隊的結點

*e = p->data;

//獲取結點資料

q->front->next = p->next;

//令頭結點的後繼=出隊結點的後繼

free

(p);

//釋放出隊接點

if(q->front->next ==

null

)return true;

}

資料結構 c 語言版 第三章 列表

向量是連續儲存的,列表是鏈式儲存的。向量有尋秩訪問的能力,隨機查詢迅速,但是插入和刪除效能差。列表的尋位置訪問,隨機查詢效能差,但是插入和刪除效能高 氣泡排序是每輪迴圈,比較左右兩個元素,比較大的交換到後面,所以一輪迴圈能夠保證當前最大的元素一定排到最後面。但是氣泡排序這樣就產生很大的缺點,大量的時...

資料結構第三章學習小結

一 本章內容小結 第三章主要學習了兩種資料結構 棧和佇列,它們是操作受限的線性表。棧只能在棧頂進行插入和刪除,因此先進後出 而佇列則是在隊頭刪除,隊尾插入,先進先出,因此需要根據題目來選取應用哪種資料結構。後面還通過棧來處理遞迴問題,並分析遞迴方法的效率與時間複雜度,最後通過學習三個經典案例 括號匹...

資料結構第三章學習小結

1.這一章學習了兩種新的結構,棧和佇列,棧是後進先出的結構,佇列是先進先出的結構,兩種結構的特點決定了兩種結構使用的場景。下面對棧和佇列的一些基本操作進行展示。一 棧 分為順序棧和鏈棧,這裡是順序棧的一些基本操作 1 include 2 include 3 using namespace std 4...