• 25 链队列


    1,定义链队列结点结构,链队列结构,初始化空链队列

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义链队列结点结构
    typedef struct LinkQueueNode {
    	int data;
    	struct LinkQueueNode* next;
    }LQNode;
    
    
    //定义一个链队列
    typedef struct LinkQueue {
    	LQNode* front; //队首结点
    	LQNode* rear; //队尾结点
    }LQ;
    
    
    //初始化空链队列
    LQ initLQ(LQ LQ) {
    	LQ.front = (LQNode*)malloc(sizeof(LQNode));
    	LQ.front->data = -1;
    	LQ.front->next = NULL;
    	LQ.rear = LQ.front; //队首结点和队尾结点是同一个结点
    	return LQ;
    }
    
    void main() {
    	struct LinkQueue myLQ;
    	myLQ.front = myLQ.rear = NULL;
    	myLQ = initLQ(myLQ);
    	printf("初始化空队列是:
    ");
    	printf("%d
    ", myLQ.front->data);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    }
    

     2,链队列入队操作

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义链队列结点结构
    typedef struct LinkQueueNode {
    	int data;
    	struct LinkQueueNode* next;
    }LQNode;
    
    
    //定义一个链队列
    typedef struct LinkQueue {
    	LQNode* front; //队首结点
    	LQNode* rear; //队尾结点
    }LQ;
    
    
    //初始化空链队列
    LQ initLQ(LQ LQ) {
    	LQ.front = (LQNode*)malloc(sizeof(LQNode));
    	LQ.front->data = -1;
    	LQ.front->next =NULL;
    	LQ.rear = LQ.front; //队首结点和队尾结点是同一个结点
    	return LQ;
    }
    
    //入队
    LQ push(LQ LQ, int elem) {
    	LQNode* new_node = (LQNode*)malloc(sizeof(LQNode));//生成新结点
    	new_node->data = elem; 
    	new_node->next = NULL;
    	//LQ.front->next = new_node;//入队时不需要和队首结点连接上??
    	LQ.rear->next = new_node; //在队尾结点处插入新结点 
    	LQ.rear = new_node;//队尾结点后移
    	return LQ;
    }
    
    void showLQ(LQ LQ) {
    	LQNode* tmp = LQ.front;
    	while (tmp != NULL) {
    		printf("%d  ", tmp->data);
    		tmp = tmp->next;
    	}
    	printf("
    ");
    }
    
    
    void main() {
    	struct LinkQueue myLQ;
    	myLQ.front = myLQ.rear = NULL;
    	myLQ = initLQ(myLQ);
    	printf("初始化空队列是:
    ");
    	printf("%d
    ", myLQ.front->data);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    
    	myLQ=push(myLQ, 10);
    	printf("将10入队后的队列是:
    ");
    	showLQ(myLQ);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    
    }
    

    3,初始化 压入10个元素入队,并遍历打印出链队列中的全部元素

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义链队列结点结构
    typedef struct LinkQueueNode {
    	int data;
    	struct LinkQueueNode* next;
    }LQNode;
    
    
    //定义一个链队列
    typedef struct LinkQueue {
    	LQNode* front; //队首结点
    	LQNode* rear; //队尾结点
    }LQ;
    
    
    //初始化空链队列
    LQ initLQ(LQ LQ) {
    	LQ.front = (LQNode*)malloc(sizeof(LQNode));
    	LQ.front->data = -1;
    	LQ.front->next =NULL;
    	LQ.rear = LQ.front; //队首结点和队尾结点是同一个结点
    	return LQ;
    }
    
    //入队
    LQ push(LQ LQ) {
    	for (int i = 0; i < 10; i++) {
    		LQNode* new_node = (LQNode*)malloc(sizeof(LQNode));//生成新结点
    		new_node->data = i;
    		new_node->next = NULL;
    		LQ.rear->next = new_node; //在队尾结点处插入新结点
    		LQ.rear = new_node;//队尾结点后移
    	}
    	return LQ;
    }
    
    void showLQ(LQ LQ) {
    	LQNode* tmp = LQ.front;
    	while (tmp != NULL) {
    		printf("%d  ", tmp->data);
    		tmp = tmp->next;
    	}
    	printf("
    ");
    }
    
    
    void main() {
    	struct LinkQueue myLQ;
    	myLQ.front = myLQ.rear = NULL;
    	myLQ = initLQ(myLQ);
    	printf("初始化空队列是:
    ");
    	printf("%d
    ", myLQ.front->data);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    
    	myLQ=push(myLQ);
    	printf("将10个元素入队后的队列是:
    ");
    	showLQ(myLQ);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    
    }
    

     4,链队列出队操作

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义链队列结点结构
    typedef struct LinkQueueNode {
    	int data;
    	struct LinkQueueNode* next;
    }LQNode;
    
    
    //定义一个链队列
    typedef struct LinkQueue {
    	LQNode* front; //队首结点
    	LQNode* rear; //队尾结点
    }LQ;
    
    
    //初始化空链队列
    LQ initLQ(LQ LQ) {
    	LQ.front = (LQNode*)malloc(sizeof(LQNode));
    	LQ.front->data = -1;
    	LQ.front->next =NULL;
    	LQ.rear = LQ.front; //队首结点和队尾结点是同一个结点
    	return LQ;
    }
    
    //入队
    LQ push(LQ LQ) {
    	for (int i = 0; i < 10; i++) {
    		LQNode* new_node = (LQNode*)malloc(sizeof(LQNode));//生成新结点
    		new_node->data = i;
    		new_node->next = NULL;
    		
    		LQ.rear->next = new_node; //在队尾结点处插入新结点
    		LQ.rear = new_node;//队尾结点后移
    	}
    	return LQ;
    }
    
    //出队
    LQ pop(LQ LQ) {
    	while (LQ.front != LQ.rear) {
    		printf("出队结点是:%d
    ", LQ.front->next->data); //从入队第一个元素开始打印
    		LQNode* tmp = LQ.front;
    		LQ.front = LQ.front->next;
    		free(tmp);
    	}
    	free(LQ.front);
    	return LQ;
    }
    
    void showLQ(LQ LQ) {
    	LQNode* tmp = LQ.front;
    	while (tmp != NULL) {
    		printf("%d  ", tmp->data);
    		tmp = tmp->next;
    	}
    	printf("
    ");
    }
    
    
    void main() {
    	struct LinkQueue myLQ;
    	myLQ.front = myLQ.rear = NULL;
    	myLQ = initLQ(myLQ);
    	printf("初始化空队列是:
    ");
    	printf("%d
    ", myLQ.front->data);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    
    	myLQ=push(myLQ);
    	printf("将10个元素入队后的队列是:
    ");
    	showLQ(myLQ);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    
    	printf("链队列元素出队:
    ");
    	myLQ=pop(myLQ);
    	printf("队首结点是:%d
    ", myLQ.front->data);
    	printf("队尾结点是:%d
    ", myLQ.rear->data);
    }
    

  • 相关阅读:
    [LeetCode] 399. Evaluate Division Java
    图的遍历
    [LeetCode] 332. Reconstruct Itinerary Java
    [LeetCode] 310. Minimum Height Trees Java
    sql like 查询
    递归树
    用SQL语句,删除掉重复项只保留一条
    Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String
    如何利用java得到当前的时间和前一天的时间
    Java 字符串用逗号并接
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12611359.html
Copyright © 2020-2023  润新知