Data Structure Exercise (Queue)

Title requirements:
Define a queue, which requires a linked list to be implemented, so that it has the following functions:
(1) Initialize the queue, requiring an empty queue;
(2) Enqueue operation, put an element into the queue;
(3) Dequeue Operation, delete the element from the queue;
(4) Destroy the queue.
Each of the above steps is made into a function, and the relevant code is given.
Reference Code:

#include <stdio.h>
#include <stdlib.h>

/* 队列的头结点不存元素 */

//定义结构体
struct qnode{
    
      
    int   data ;
   struct qnode  *next;
};

//定义队列 
struct link_queue{
    
       
	struct qnode  *front,*rear ; //队头,队尾
};

//初始化队列
struct link_queue* init_queue(){
    
    
	struct link_queue* q=(struct link_queue*)malloc(sizeof(struct link_queue));
    q->front = NULL;
    q->rear = NULL;
	
    struct qnode* node=(struct qnode*)malloc(sizeof(struct qnode));
    node->data= NULL;
    node->next = NULL;
    
    q->front = node;
    q->rear = node;
    return q;
}

//插入队列元素 
struct link_queue* insert_queue(struct link_queue* q,int num){
    
    
	struct qnode* node=(struct qnode*)malloc(sizeof(struct qnode));
	node->data=num;
	node->next=NULL;
	
	q->rear->next=node;
	q->rear=node;
	
	return q;
} 
//删除队列元素
struct link_queue* delete_queue(struct link_queue* q){
    
    
	if(q->front==q->rear){
    
    
        return q;
	} 
    
    if(q->front->next->next==NULL){
    
    
		q->rear=q->front;
        free(q->front->next);
        q->front->next=NULL;
        return q;
    }
	
    struct qnode *temp=q->front->next;
	q->front->next=q->front->next->next;
    free(temp);
     return q;
} 
//销毁队列
void destroy_queue(struct link_queue* q){
    
    
   while(q->front!=q->rear){
    
    
	q=delete_queue(q);
   }
    free(q->front);
	free(q);
    printf("队列已销毁!\n");
    return;
    
} 

//显示队列元素 
void print_queue(struct link_queue* q){
    
    
	struct qnode *temp=q->front->next;
	if(q->front==q->rear){
    
    
		printf("队列元素为空!\n");
        return;
	} 
    
	printf("队列元素有:");
	for(temp;;temp=temp->next){
    
    
		if(temp->next!=NULL){
    
    
			printf("%d,",temp->data);
        }else{
    
    
			printf("%d\n",temp->data);
			break;
		}
    }	
   
}


int main(int argc, char *argv[]) {
    
    
	struct link_queue* result;
	
	//初始化 
	result=init_queue();
    //打印
	print_queue(result);
    
	//入队5个元素
	result=insert_queue(result,1);
	result=insert_queue(result,2);
    result=insert_queue(result,3);
    result=insert_queue(result,4);
    result=insert_queue(result,5);
    //打印
    print_queue(result);
	
    //出队1个元素
	result=delete_queue(result);
    //打印
    print_queue(result);
	
    //销毁队列
    //destroy_queue(result);
			
    system("pause");
	return 0;
}

Running results:
(1) Initialize the queue, get an empty queue, and print the result at this time:
insert image description here

(2) Enqueue operation, put an element into the queue;
insert image description here

(3) Dequeue operation, delete the element from the queue;
insert image description here

(4) Destroy the queue.
insert image description here

Guess you like

Origin blog.csdn.net/weixin_46220576/article/details/123094137