資料結構 棧和佇列

2021-08-16 01:40:29 字數 3629 閱讀 1964

五.棧與佇列

特點:先進後出,不考慮排序。

佇列特點:先進先出。

#include #include #include using namespace std;  

template class cqueue

;

//成員函式定義.

template cqueue::cqueue(void)

template cqueue::~cqueue(void)

//向佇列中插入元素.

//從佇列中刪除元素.

template t cqueue::deletehead()

if(stack2.size() == 0)

throw new exception("queue is empty!");

t head = stack2.top();

stack2.pop();

return head;

}

//測試函式.

void test(char actual, char expected)

int main()

總結:棧:

#include #include #include #include using namespace std;

int main()

seqstack; //seqstack為結構體的別名而已,還可以使用多個別名,且多個別名建立的物件使用的不是同乙個記憶體空間, 並根據陣列的結構定義成員

seqstack * s; //棧

void initstack(seqstack * s)

int empty(seqstack * s)

//入棧:賦值 , 索引++

void push(seqstack * s, int x)

else

}//獲取棧頂元素data[s->top--] 這裡需要top--是因為入棧時top索引++了

void pop(seqstack * s)

else

}int main()

棧的鍊錶實現        (利用棧的基本操作來實現對鍊錶的操作)

#include #include #include #include typedef struct node

node,linkstack; //使用多個別名,在這裡node為節點

//初始化

void initstack(linkstack * top)

//是否為空 只用想想鍊錶的結構就很清楚了,節點與節點之間通過指標關聯,只要top->next為null即可

int isempty(linkstack * top)

//入棧:新建乙個節點賦值,讓新節點的next指標指向null,棧內top->next指向新節點即可

int push(linkstack * top, int x)

//刪除棧頂元素:

int pop(linkstack * top, int *x)

p = top->next;

*x = p->data;

top->next = p->next;

free(p);

return 1;

}int main()

#include #include #include #define maxsize 66    //定義變數

typedef struct      //type define 結構定義

sequeue;

sequeue *q;          //迴圈鍊錶

void initqueue(sequeue *q)

int del(sequeue *q)     

}int insertqueue(sequeue *q,int x)    //向佇列中插入元素,思路:先判斷列尾是否超出maxsize大小,然後讓索引rear+1,對應的給陣列data[rear+1]賦值,來實現插入

}int empty(sequeue * q)          //簡單判斷佇列是否為空,也就是陣列data是否為空

void print(sequeue * q)          //遍歷輸出資料元素

}}int main()

佇列的陣列實現(利用陣列的資料結構來對佇列進行操作)   先想想陣列的實現原理

原理:front           ->            rear           (假設佇列順序從左往右)

data[front]  ->             data[rear] (如果對佇列中front、rear操作,則相應的資料元素、大小也隨之變化)

#include #include #include #define maxsize 66    //定義變數

typedef struct      //type define 結構定義

sequeue;

sequeue *q;          //迴圈鍊錶

void initqueue(sequeue *q)

int del(sequeue *q)     

}int insertqueue(sequeue *q,int x)    //向佇列中插入元素,思路:先判斷列尾是否超出maxsize大小,然後讓索引rear+1,對應的給陣列data[rear+1]賦值,來實現插入

}int empty(sequeue * q)          //簡單判斷佇列是否為空,也就是陣列data是否為空

void print(sequeue * q)          //遍歷輸出資料元素

}}int main()

front           ->            rear           (假設佇列順序從左往右)

#include #include #include typedef struct node        //節點

linklist;             //節點物件             

typedef struct

linkqueue;              

linkqueue * q;           //鍊錶         

//建立佇列

void initqueue(linkqueue * q)

//判斷佇列空否

int empty(linkqueue * q)

//入佇列 先定義乙個與listlink相同的節點物件,然後再將它加入鍊錶佇列中(rear->next指向新建的節點)

void inqueue(linkqueue * q, int x)

//出佇列 從front節點開始一節一節的取,此方法每呼叫乙個就取乙個,一直取到最後乙個時,就會一直返回q->rear

int outqueue(linkqueue * q)

}//main

int main()

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 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 大家都知道斐波那契數列,現...