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("初始化空队列是:\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);
}

 

posted @ 2020-04-01 11:30  shanlu  阅读(118)  评论(0编辑  收藏  举报