首页 > 其他 > 详细

25 链队列

时间:2020-04-01 13:09:19      阅读:64      评论:0      收藏:0      [点我收藏+]

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("初始化空队列是:\n");
	printf("%d\n", myLQ.front->data);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", 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("\n");
}


void main() {
	struct LinkQueue myLQ;
	myLQ.front = myLQ.rear = NULL;
	myLQ = initLQ(myLQ);
	printf("初始化空队列是:\n");
	printf("%d\n", myLQ.front->data);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", myLQ.rear->data);

	myLQ=push(myLQ, 10);
	printf("将10入队后的队列是:\n");
	showLQ(myLQ);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", 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("\n");
}


void main() {
	struct LinkQueue myLQ;
	myLQ.front = myLQ.rear = NULL;
	myLQ = initLQ(myLQ);
	printf("初始化空队列是:\n");
	printf("%d\n", myLQ.front->data);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", myLQ.rear->data);

	myLQ=push(myLQ);
	printf("将10个元素入队后的队列是:\n");
	showLQ(myLQ);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", 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\n", 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("\n");
}


void main() {
	struct LinkQueue myLQ;
	myLQ.front = myLQ.rear = NULL;
	myLQ = initLQ(myLQ);
	printf("初始化空队列是:\n");
	printf("%d\n", myLQ.front->data);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", myLQ.rear->data);

	myLQ=push(myLQ);
	printf("将10个元素入队后的队列是:\n");
	showLQ(myLQ);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", myLQ.rear->data);

	printf("链队列元素出队:\n");
	myLQ=pop(myLQ);
	printf("队首结点是:%d\n", myLQ.front->data);
	printf("队尾结点是:%d\n", myLQ.rear->data);
}

技术分享图片

 

25 链队列

原文:https://www.cnblogs.com/shanlu0000/p/12611359.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!