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); }
原文:https://www.cnblogs.com/shanlu0000/p/12611359.html