//single-linked list implementation for queues//head node: Sentinel function, where data is not stored, which is used to initialize the queue so that the tail of the team head is pointed.//First node : node after head node, storing data#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedefintElementype;//Defining data Types//Defining the node structuretypedefstructNode {elementype Element; //data fields structNode *Next;} NODE,*Pnode;//defining the queue structure bodytypedefstructQnode {pnode Front, Rear; //queue header, tail pointer} Queue, *Pqueue;//declaring the function bodyvoidInitqueue (Pqueue);//Create a queue functionBOOLIsemptyqueue (Pqueue);//determine if the queue is an empty functionvoidInsertqueue (Pqueue,intVal);//Queue functionvoidDeletequeue (Pqueue,int* val);//out Team functionvoidDestroyqueue (Pqueue);//Destroy queue functionvoidTraversequeue (Pqueue);//traversing queue functionsvoidClearqueue (Pqueue);//Empty queue functionintLengthqueue (Pqueue);//Find the queue Length function//Main functionintMain () {intval =0;//Defining temporary variablesQueue queue;//Create a queue variableInitqueue (&queue);//Call Initialize queue functionIsemptyqueue (&queue);//call to determine if the queue is an empty functionInsertqueue (&queue, -);//Call the Enqueue functionInsertqueue (&queue, $); Insertqueue (&queue, -); Insertqueue (&queue, -); Insertqueue (&queue, -); Insertqueue (&queue, -); Isemptyqueue (&queue); Traversequeue (&queue);//Call Queue traversal functionDeletequeue (&queue, &val);//call out the team functionTraversequeue (&queue); Clearqueue (&queue);//Call empty queue functionIsemptyqueue (&queue); Destroyqueue (&queue);//Call the Destroy queue function return 0;}//defining the queue initialization functionvoidinitqueue (pqueue queue) {Queue->front = Queue->rear = (pnode)malloc(sizeof(NODE));//dynamic creation of head nodes, so that the team head, the tail points to the node//the head node acts as a sentinel node and does not store data (as distinct from the first node) if(Queue->front = = NULL) {//determine if memory is allocated successfullyprintf"Create queue, unable to allocate required memory ..."); Exit (-1); } Queue->front->next = NULL;//Initial queue head node pointer pointing to nullprintf"Create queue success ... \ n");}//defines whether the queue is an empty functionBOOLisemptyqueue (pqueue queue) {if(Queue->front = = queue->Rear) {printf ("queue is empty ... \ n"); return true; } Else { //printf ("Queue is not empty ... \ n"); return false; } }//defining the Queued function//insert data from the end of the queue ValvoidInsertqueue (Pqueue queue,intval) {Pnode P= (Pnode)malloc(sizeof(NODE));//Create a new node to hold the inserted element if(P = =NULL) {printf ("memory allocation failed, unable to insert data%d ...", Val); Exit (-1); } P->element = val;//Put the data you want to insert into the node data fieldP->next = NULL;//The new node pointer is pointing to an emptyQueue->rear->next = P;//Point the node pointer at the end of the previous queue to the newly created nodeQueue->rear = P;//update the tail pointer to point to the last node in the queueprintf"Insert data%d successfully ... \ n", Val);}//define the team function//start the team from the first node of the queue//If the team succeeds, return its value with ValvoidDeletequeue (Pqueue queue,int*val) { if(Isemptyqueue (queue)) {printf ("queue is empty, unable to get out of the team ... \ n"); Exit (-1); } pnode P= queue->front->next;//Temporary pointers*val = p->element;//save its valueQueue->front->next = p->next;//Update head node if(queue->rear==P) Queue->rear = queue->Front; Free(P);//Release Head QueueP = NULL;//prevents the creation of wild pointersprintf"The stack is successful and the stack value is%d\n", *val);}//defining queue Traversal functionsvoidtraversequeue (pqueue queue) {if(Isemptyqueue (queue)) {exit (-1); } pnode P= queue->front->next;//traversal from the first node of the queue (not the head node, note the distinction)printf"The traversal queue results are:"); while(P! =NULL) {printf ("#df", p->Element); P= p->Next; } printf ("\ n");}//define the Destroy function of the queue//Delete the entire queue, including the head nodevoiddestroyqueue (pqueue queue) {//Delete from the start node while(Queue->front! =NULL) {Queue->rear = queue->front->Next; Free(queue->Front); Queue->front = queue->Rear; } printf ("Destroy queue success ... \ n");}//define empty queue functionsvoidclearqueue (pqueue queue) {Pnode P= queue->front->next;//Temporary pointersPnode Q = NULL;//Temporary pointersQueue->rear = queue->front;//point the tail pointer to the head nodeQueue->front->next =NULL; //start emptying from the first node while(P! =NULL) {Q=P; P= p->Next; Free(Q); } printf ("empty queue succeeded ... \ n");}
Run results
Implementation and operation of the queue (C language description)