As a child. When we do morning exercises or military training, are lined up in a row, symbolizing. If you are late, you can only stand on the last one. At the exit. Is the first one to go first. This is the embryonic form of the queue.
Definition of a queue
A queue is a special kind of linear table
Queues operate only on both ends of a linear table
Team Head (Front) : Remove one end of the data element
End of Team (Rear) : Insert one end of a data element
Different queues are intended to operate in the middle!
A queue is essentially a special operation form of a linear table that is deleted at the head. Get, join at the tail.
Basically similar to the stack, change the hot not dressing. Detailed to be able to participate in
implementation and operation of the stack (C language Implementation)
As with stacks, queues have the same linear and chained structure. Respectively for example the following:
======================================================================================================
Linear form of the queue:
The linear form of the queue is essentially a sequential linear table, where the same code is reused, the code on the sequential linear table is not affixed, and the implementation and operation of the sequential linear table can be read in detail (C language Implementation)
Header file:
#ifndef _seqqueue_h_#define _seqqueue_h_typedef void seqqueue; seqqueue* seqqueue_create (int capacity); void Seqqueue_destroy (seqqueue* queue); void Seqqueue_clear (seqqueue* queue); int Seqqueue_append (seqqueue* queue, void* item); void* Seqqueue_retrieve (seqqueue* queue); void* Seqqueue_header ( seqqueue* queue); int seqqueue_length (seqqueue* queue); int seqqueue_capacity (seqqueue* queue); #endif
Source file:
Linear queue. CPP: Defines the entry point of the console application.#include "stdafx.h" #include "SeqList.h" #include "SeqQueue.h" #include <stdlib.h>seqqueue* seqqueue_create ( int capacity) {return seqlist_create (capacity);} void Seqqueue_destroy (seqqueue* queue) {Seqlist_destroy (queue);} void Seqqueue_clear (seqqueue* queue) {seqlist_clear (queue);} Insert int seqqueue_append (seqqueue* queue, void* item) at the tail {return Seqlist_insert (queue, item, Seqlist_length (queue));} Delete Head void* seqqueue_retrieve (seqqueue* queue) {return Seqlist_delete (queue, 0);} void* seqqueue_header (seqqueue* queue) {return Seqlist_get (queue, 0);} int seqqueue_length (seqqueue* queue) {return seqlist_length (queue);} int seqqueue_capacity (seqqueue* queue) {return seqlist_capacity (queue);} int _tmain (int argc, _tchar* argv[]) {seqqueue* queue = seqqueue_create (20); int a[10] = {0}; int i = 0; for (i=0; i<10; i++) {A[i] = i + 1; Seqqueue_append (queue, A + i); } printf ("Header:%d\n", * (int*) Seqqueue_headeR (queue)); printf ("Length:%d\n", Seqqueue_length (queue)); printf ("Capacity:%d\n", seqqueue_capacity (queue)); while (Seqqueue_length (queue) > 0) {printf ("Retrieve:%d\n", * (int*) Seqqueue_retrieve (queue)); } seqqueue_destroy (queue); System ("pause"); return 0;}
Execution Result:
Header:1length:10capacity:20retrieve:1retrieve:2retrieve:3retrieve:4retrieve:5retrieve:6retrieve:7retrieve:8re Trieve:9retrieve:10 Please press the random key to continue ...
======================================================================================
Chained implementations of queues:
Same. The chain implementation of the queue is essentially a chain-like linear table, please refer to the code of the linked list: Implementation and operation of the linked list (C language Implementation)
Header file:
#ifndef _linkqueue_h_#define _linkqueue_h_typedef void linkqueue; linkqueue* linkqueue_create (); void Linkqueue_destroy (linkqueue* queue); void Linkqueue_clear (linkqueue* queue); int Linkqueue_append (linkqueue* queue, void* item); void* Linkqueue_retrieve (linkqueue* queue); void* Linkqueue_header ( linkqueue* queue); int linkqueue_length (linkqueue* queue); #endif
Source file:
Chained queue. CPP: Defines the entry point of the console application. #include "stdafx.h" #include "LinkList.h" #include "LinkQueue.h" #include <malloc.h> #include <stdlib.h> int _tmain (int argc, _tchar* argv[]) {linkqueue* queue = linkqueue_create (); int a[10] = {0}; int i = 0; for (i=0; i<10; i++) {A[i] = i + 1; Linkqueue_append (queue, A + i); } printf ("Header:%d\n", * (int*) Linkqueue_header (queue)); printf ("Length:%d\n", Linkqueue_length (queue)); while (Linkqueue_length (queue) > 0) {printf ("Retrieve:%d\n", * (int*) Linkqueue_retrieve (queue)); } linkqueue_destroy (queue); System ("pause"); return 0;} typedef struct _tag_linkqueuenode{Linklistnode header; void* item;} Tlinkqueuenode; linkqueue* linkqueue_create () {return linklist_create ();} void Linkqueue_destroy (linkqueue* queue) {linkqueue_clear (queue); Linklist_destroy (queue);} void Linkqueue_clear (linkqueue* queue)//O (n) {while (Linkqueue_length (queue) > 0) {Linkqueue_retrieve (queue); }}//adds int linkqueue_append (linkqueue* queue, void* item) at the tail {tlinkqueuenode* node = (tlinkqueuenode*) malloc (sizeof (TLi Nkqueuenode)); int ret = (item! = NULL) && (node! = NULL); if (ret) {Node->item = Item; ret = Linklist_insert (queue, (linklistnode*) node, linklist_length (queue)); } if (!ret) {Free (node); } return ret;} Delete Head void* linkqueue_retrieve (linkqueue* queue) {tlinkqueuenode* node = (tlinkqueuenode*) linklist_delete (queue, 0); void* ret = NULL; if (node! = NULL) {ret = node->item; Free (node); } return ret;} void* linkqueue_header (linkqueue* queue) {tlinkqueuenode* node = (tlinkqueuenode*) linklist_get (queue, 0); void* ret = NULL; if (node! = NULL) {ret = node->item; } return ret;} int linkqueue_length (linkqueue* queue) {return linklist_length (queue);}
Execution Result:
Header:1length:10retrieve:1retrieve:2retrieve:3retrieve:4retrieve:5retrieve:6retrieve:7retrieve:8retrieve:9ret Rieve:10 Please press the random key to continue ...
If there is an error. Hope to point out.
Definition and implementation of queues (C language Implementation)