前提知識
順序表優點:可以隨機訪問,cpu快取記憶體利用率高,不涉及(較少)進行插入和刪除操作,應該使用順序表
一般而言,我們使用順序表(陣列)的形式建立 棧這一資料結構。
其特點是先進後出,模仿c++stl的stack和queue,我們用c語言實現這2個資料結構 。棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
較為常用的,棧只能對棧頂進行操作,而且鑑於載入快取的因素,我們可以使用動態開闢線性表的方式實現
#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。分析 由於 最先得到 的餘數是轉化結果的 最低位 最後得到的...