队列_笔记
與棧類似但規則不一樣,棧是先進后出只有一個口,隊列是兩個口規則先進先出一個口只能進,一個口只能出
.h
#define MAX_SIZE 1024//順序隊列結構體 typedef struct SEQQUEUE {void *data[MAX_SIZE];int size; }SeqQueue;class Queue { public:Queue();~Queue();public:SeqQueue* queue;public://入隊void Push_Queue(SeqQueue* queue,void *data);//返回對頭元素void* Front_Queue(SeqQueue* queue);//出隊void Pop_Queue(SeqQueue* queue);//返回隊尾元素void* Back_Queue(SeqQueue* queue);//返回大小int Size_Queue(SeqQueue* queue);//清空void Clear_Queue(SeqQueue* queue);};.cpp
Queue::Queue() {queue = new SeqQueue();for (int i = 0; i < MAX_SIZE; i++){queue->data[i] = NULL;}queue->size = 0; }Queue::~Queue() {if (queue == NULL){return;}delete queue;}//入隊 void Queue::Push_Queue(SeqQueue* queue, void *data) {if (queue == NULL || data == NULL || queue->size == MAX_SIZE){return;}//數組左邊當做隊頭queue->data[queue->size] = data;queue->size++; }//返回對頭元素 void* Queue::Front_Queue(SeqQueue* queue) {if (queue == NULL || queue->size == 0){return NULL;}return queue->data[0]; }//出隊 void Queue::Pop_Queue(SeqQueue* queue) {if (queue == NULL || queue->size == 0){return ;}//需要移動元素for (int i = 0; i < queue->size -1; i++){queue->data[i] = queue->data[i + 1];}queue->size--; }//返回隊尾元素 void* Queue::Back_Queue(SeqQueue* queue) {if (queue == NULL || queue->size == 0){return NULL;}return queue->data[queue->size -1]; }//返回大小 int Queue::Size_Queue(SeqQueue* queue) {if (queue == NULL ){return -1;}return queue->size; }//清空 void Queue::Clear_Queue(SeqQueue* queue) {if (queue == NULL){return;}queue->size = 0; }main.cpp
typedef struct PERSON {char name[64];int age; }Person;int main() {Queue* q = new Queue();//創建數據Person p1 = { "p1",10 };Person p2 = { "p2",20 };Person p3 = { "p3",30 };Person p4 = { "p4",40 };Person p5 = { "p5",50 };//數據入隊列q->Push_Queue(q->queue, &p1);q->Push_Queue(q->queue, &p2);q->Push_Queue(q->queue, &p3);q->Push_Queue(q->queue, &p4);q->Push_Queue(q->queue, &p5);//輸出對尾元素Person* BackPerson = (Person*)q->Back_Queue(q->queue);cout << "Name:" << BackPerson->name << " ";cout << "Age:" << BackPerson->age<<" ";cout<< endl<<endl;//輸出while (q->Size_Queue(q->queue)>0){//取出對頭元素Person *p = (Person*)q->Front_Queue(q->queue);cout << "Name:" << p->name << " ";cout << "Age:" << p->age << " ";cout << endl;//彈出元素q->Pop_Queue(q->queue);}return 0; }總結
- 上一篇: 栈的链式存储_笔记
- 下一篇: 栈的应用就进匹配_笔记