佇列與堆疊

2021-07-30 23:51:14 字數 1475 閱讀 8553

兩個線性資料結構:堆疊(stack)和佇列(queue)。

堆疊中元素具有後進先出lifo(last-in-fisrt-out),而佇列中的元素確實先進先出fifo(fisrt-in-last-out)。

#define maxsize	50

#define false 0

#define true 1

typedef int bool;

typedef int t;

typedef struct stack

stack;

void createstack(stack* s,int maxsize)

bool isempty(stack s)

bool isfull(stack s)

void push(stack* s,t x)

void pop(stack* s)

void stacktop(stack s, t* x) //將棧頂元素返回至x

void printstack(stack s)

}

typedef struct node

node;

typedef struct stack

stack;

void push(stack* s,t x)//入棧

void pop(stack* s)/出棧

在一端插入元素,另一端刪除元素

typedef struct queue

queue;

初始狀態下front,rear都等於-1,表示空佇列。插入元素,則rear右移乙個單位,刪除則front右移乙個單位。

顯然,順序結構的弊端是front左邊的空間被浪費了。

因此,將佇列從邏輯上看成是乙個頭尾相接的環。初始狀態下,front和rear均為0.

隊頭指標的進一步操作:

front = (front+1)%maxqueue;
隊尾指標的進一步操作:

rear = (rear+1)%maxqueue;
當front == rear時隊列為空,而當(rear+1)%maxqueue == front時佇列未滿(空餘乙個元素空間,為了區分滿佇列)

void createqueue(queue* q,int maxsize)

bool isempty(queue q)

bool isfull(queue q)

void serve(queue* q)//刪除隊首元素

void queuefront(queue q,t* x)//返回隊首元素

typedef struct queue

queue;

堆疊與佇列

堆疊與佇列可以用陣列實現,也可以用鍊錶實現。下文統一用鍊錶實現上述資料結構。堆疊服從先進後出原則,只對棧頭進行刪除和插入操作,即封鎖了鍊錶的一端,只對鍊錶的另一端進行操作,就形成了邏輯上的堆疊結構。節點 public class stacknode 堆疊實現 public class stackli...

堆疊與佇列模擬

兩個題目 1 用兩個堆疊模擬乙個佇列 2 用兩個佇列模擬乙個堆疊 先看第乙個問題 用兩個堆疊模擬乙個佇列 只需要明白堆疊和佇列的特點,乙個是先進後出,乙個是先進先出就好做事了。乙個堆疊是先進先出,再把這個堆疊的資料存放到第二個堆疊不就ok了,變成了先進先出了麼?所以解決方法1就是兩個棧 stack1...

python 堆疊與佇列

昨天嘗試了python的鍊錶操作,一時意猶未盡,就連續寫了幾行python堆疊與佇列的 當然python作為高階語言,一般都要使用到類。在抒寫 之前,首先要對堆疊和佇列兩種資料結構進行分析,提取出各自類的特徵屬性 資料和方法 class stack def init self,top.top指標 d...