队列的初始化、进队,出队操作(C语⾔实现)//头⽂件和机构体
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
//链表节点
typedef struct LinkQueuenode
{
elemtype data;
struct LinkQueuenode *next;
}LinkQueue;
//指向链表的头结点的节点
typedef struct LQueue
{
LinkQueue *front;
LinkQueue *rear;
}LQueue;
//初始化队列
LQueue *init_LinkQueue()
{
LinkQueue *head;
LQueue *Q;
Q =(LQueue *)malloc(sizeof(LQueue));
head =(LinkQueue *)malloc(sizeof(LinkQueue));
if(0== Q ||0== head){
return Q;
}
head -> next =NULL;
Q -> front = head;
Q -> rear = head;
head -> data =0;
return Q;
}
//⼊队
void enter_LinkQueue(LQueue *Q,elemtype x)
{
LinkQueue *p;
p =(LinkQueue *)malloc(sizeof(LinkQueue));
if(0== p){
return;
}
p -> data = x;
p -> next =NULL;
Q -> front -> data ++;//记录节点的个数
Q -> rear -> next = p;
Q -> rear = p;
return;
}
//出队
node = Q -> front -> next;//⾸结点
if(Q -> front == Q -> rear){
return;
}
*x = node -> data;
Q -> front -> next  = node -> next;
if(node == Q -> rear){
Q -> rear = Q -> front;
}
free(node);
Q -> front -> data --;
return;
}
//输出
void print(LQueue *Q)
{
elemtype *x;
int k;
x =&k;
while(Q -> front != Q -> rear){
delete_LinkQueue(Q,x);
printf("%d ",*x);
}
}
下⾯的完整代码
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct LinkQueuenode
{
elemtype data;
struct LinkQueuenode *next;
}LinkQueue;
typedef struct LQueue
{
LinkQueue *front;
LinkQueue *rear;
}LQueue;
//初始化队列
LQueue *init_LinkQueue()
{
LinkQueue *head;
LQueue *Q;
Q =(LQueue *)malloc(sizeof(LQueue));
head =(LinkQueue *)malloc(sizeof(LinkQueue)); if(0== Q ||0== head){
return Q;
}
head -> next =NULL;
Q -> front = head;
Q -> rear = head;
head -> data =0;
return Q;
}
//⼊队列
p =(LinkQueue *)malloc(sizeof(LinkQueue)); if(0== p){
return;
}
p -> data = x;
p -> next =NULL;
Q -> front -> data ++;//记录节点的个数
Q -> rear -> next = p;c语言struct头文件
Q -> rear = p;
return;
}
//出队列
void delete_LinkQueue(LQueue *Q,elemtype *x) {
LinkQueue *node;
node = Q -> front -> next;//⾸结点
if(Q -> front == Q -> rear){
return;
}
*x = node -> data;
Q -> front -> next  = node -> next;
if(node == Q -> rear){
Q -> rear = Q -> front;
}
free(node);
Q -> front -> data --;
return;
}
//输出
void print(LQueue *Q)
{
elemtype *x;
int k;
x =&k;
printf("出队结果为:");
while(Q -> front != Q -> rear){
delete_LinkQueue(Q,x);
printf("%d ",*x);
}
printf("\n");
}
int main()
{
LQueue *Q;
elemtype x;
Q =init_LinkQueue();
printf("请输⼊您想输⼊的数据(输⼊-100结束):"); while(x !=-100){
scanf("%d",&x);
if(x ==-100){
break;
}
enter_LinkQueue(Q,x);
}
printf("\n");
print(Q);
}
运⾏结果
⼩伙伴对代码有疑问的可以在下⾯评论或者私聊我哦,对您有帮助,点个赞⽀持⼀下吧!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。