c語言 棧和佇列的實現

2021-08-23 12:38:40 字數 2631 閱讀 2920

前提知識

順序表優點:可以隨機訪問,cpu快取記憶體利用率高,不涉及(較少)進行插入和刪除操作,應該使用順序表

一般而言,我們使用順序表(陣列)的形式建立 棧這一資料結構。

棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。

其特點是先進後出,模仿c++stl的stack和queue,我們用c語言實現這2個資料結構 。

較為常用的,棧只能對棧頂進行操作,而且鑑於載入快取的因素,我們可以使用動態開闢線性表的方式實現

#pragma once

#define n 100

typedef int datatype;

#include #include typedef struct stack//動態棧

stack;

//初始化

void stackinit(stack* ps);

// 入棧

void stackpush(stack* ps, datatype data);

// 出棧

void stackpop(stack* ps);

// 獲取棧頂元素

datatype stacktop(stack* ps);

// 有效元素的個數

int stacksize(stack* ps);

// 檢測棧是否為空

int stackempty(stack* ps);

void stackinit(stack* ps)

void stackdestory(stack * ps)

}void stackpush(stack* ps, datatype data)

ps->_array[ps->_top++] = data;

}void stackpop(stack* ps)

ps->_top--;

}datatype stacktop(stack* ps)

int stackempty(stack* ps)

int stacksize(stack* ps)

當然,我們寫樹和雜湊表時,可以使用靜態棧

//函式和動態棧是一樣的

void stackinit(stack* s)

// 入棧

void stackpush(stack* s, datatype data)

s->_array[s->_top++] = data;

}// 出棧

void stackpop(stack* s)

// 獲取棧頂元素

datatype stacktop(stack* s)

// 有效元素的個數

int stacksize(stack* s)

// 檢測棧是否為空

// 空棧---0

// 非空---1

int stackempty(stack* s)

佇列

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。 

佇列則需要使用鍊錶實現

#pragma once

#include #include #define null 0

extern struct btnode;

typedef struct btnode* qdatatype;

typedef struct node

node, *pnode;

typedef struct queue

queue;

void queueinit(queue* q);

void queuepush(queue* q, qdatatype data);

void queuepop(queue* q);

qdatatype queuefront(queue* q);

qdatatype queueback(queue* q);

int queuesize(queue* q);

int queueempty(queue* q);

pnode buynode(qdatatype data)

pnewnode->_data = data;

pnewnode->_pnext = null;

return pnewnode;

}void queueinit(queue* q)

void queuepush(queue* q, qdatatype data)

else }

void queuepop(queue* q)

}qdatatype queuefront(queue* q)

qdatatype queueback(queue* q)

int queuesize(queue* q)

return count;

}int queueempty(queue* q)

C語言實現棧和佇列

標頭檔案 stack.h pragma once include include include typedef int stdatatype typedef struct stack stack 初始化棧 void stackinit stack pst 入棧 void stackpush sta...

C語言 棧和佇列

什麼是棧,棧有什麼特性?棧,一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素的操作.進行資料插入和刪除的一端稱為棧頂,另一端稱為棧底.插入的操作稱為入棧 進棧 壓棧,刪除操作稱為出棧,插入和刪除的操作都在棧頂.棧中的資料遵循後進先出原則 last in first out 用c語言實現乙個動...

C語言 C 棧和佇列

數制轉換 將乙個非負的十進位制整數n轉換為另乙個等價的基為b的b進製數的問題,很容易通過 除b取餘法 來解決。例 將十進位制數13轉化為二進位制數。解答 按除2取餘法,得到的餘數依次是1 0 1 1,則十進位制數轉化為二進位制數為1101。分析 由於 最先得到 的餘數是轉化結果的 最低位 最後得到的...