zoukankan      html  css  js  c++  java
  • 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);
    }
    

  • 相关阅读:
    pyroscope 参考使用
    pyroscope 很不错的基于golang 的火焰图分析工具
    dremio 14 版本发布&&新的官方文档页面
    sijms/go-ora 1.0 发布了,使用buffer提升了系统的性能
    开发一个cockroachdb 的cube.js 驱动
    dremio 配置文件
    cratedb 将完全开源
    jfrog 关闭开放 bintray&&jcenter&&gocenter&&chartcenter 服务
    dremio tar 模式安装
    dremio 部署系统要求
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12611359.html
Copyright © 2011-2022 走看看