資料結構(棧和佇列)

2021-10-09 07:40:51 字數 3418 閱讀 5990

一、棧

1、什麼是棧?

棧是一種特殊的線性表,只允許在固定的一端進行元素的插入和刪除操作,且稱進行操作的那一段為棧頂,另一端稱為棧底

2、棧的基本操作

(1)壓棧

棧的插入操作,插入的資料在棧頂

(2)出棧

棧的刪除操作,出棧的資料也是棧頂資料

先進先出

3、棧的實現

棧一般利用陣列或者鍊錶實現,常用陣列結構實現,因為尾插時的代價比小

stack.h

// 順序表的動態儲存

#ifndef _stack_h_

#define _stack_h_

#include

#include

#include

typedef

struct stack

stack;

// 基本增刪查改介面

void

stackinit

(stack* psl, size_t capacity)

;void

stackdestory

(stack* psl)

;void

stackpush

(stack* psl, stdatatype x)

;void

stackpop

(stack* psl)

;stdatatype stacktop

(stack* psl)

;int

stackisempty

(stack* psl)

;#endif

//_stack_h_

stack.c

#include

"stack.h"

void

stackinit

(stack* psl, size_t capicity)

void

stackdestory

(stack* psl)

}//判斷是否要擴容

void

checkcapacity

(stack* psl)

}//壓棧

void

stackpush

(stack* psl, stdatatype x)

//出棧

void

stackpop

(stack* psl)

//棧頂元素

stdatatype stacktop

(stack* psl)

return psl-

>array[psl-

>size -1]

;}//判空

intstackisempty

(stack* psl)

二、佇列

1、什麼是佇列?

佇列是只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出特性;

2、佇列的基本操作

入佇列:進行插入操作的一端稱為隊尾

出佇列:進行刪除操作的一端稱為隊頭

3、佇列實現

queue.h

#ifndef _queue_h_

#define _queue_h_

#include

"btree.h"

typedef btnode * qudatatype;

typedef

struct queuenode

queuenode;

typedef

struct queue queue;

void

queueinit

(queue* plist)

;void

queuedestory

(queue* plist)

;void

queuepop

(queue* plist)

;void

queuepush

(queue* plist, qudatatype x)

;qudatatype queuetop

(queue* plist)

;int

queueisempty

(queue* plist)

;#endif

//_queue_h_

queue.c

#include

"queue.h"

#include

#include

#include

void

queueinit

(queue* plist)

void

queuedestory

(queue* plist)

}void

queuepop

(queue* plist)

//頭部刪除

}void

queuepush

(queue* plist, qudatatype x)

//尾部插入

//佇列不為空

plist-

>_rear-

>_next = cur;

//將cur接在rear後

plist-

>_rear = cur;

//在將其改為rear

}int

queueisempty

(queue* plist)

//判空

qudatatype queuetop

(queue* plist)

//返回隊首元素

return plist-

>_head-

>_data;

}

4、環形佇列

環形佇列可以用陣列實現也可以用迴圈鍊錶實現;(可用於解決生產者消費者問題)

環形佇列:

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...