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);
}


浙公网安备 33010602011771号