有头节点
#include<stdio.h>
typedef long long ll;
const ll INF=0x3f3f3f;
typedef struct LinkNode{
int data;
struct LinkNode* next;
}LinkNode;
typedef struct LinkQueue{
LinkNode* front;
LinkNode* rear;
}LinkQueue;
LinkQueue* InitQueue() {
LinkQueue* Q=(LinkQueue*)malloc(sizeof(LinkQueue));;
Q->front=Q->rear=(LinkNode*)malloc(sizeof(LinkNode));
Q->front->next=NULL;
return Q;
}
int IsEmpty(LinkQueue* Q) {
int flag=0;
if(Q->front=Q->rear) flag=1;
return flag;
}
void EnQueue(LinkQueue* Q, int x) {
LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
s->next=NULL;
s->data=x;
Q->rear->next=s;
Q->rear=s;
}
int DeQueue(LinkQueue* Q) {
if(Q->front==Q->rear) return INF;
else {
int x;
LinkNode* s=Q->front->next;
x=s->data;
Q->front->next=s->next;
if(Q->rear==s) Q->rear=Q->front;
free(s);
return x;
}
}
int main() {
LinkQueue* Q=InitQueue();
int x;
int n=3;
for(int i=0;i<n;i++) {
scanf("%d", &x);
EnQueue(Q, x);
}
for(int i=0;i<n+1;i++) {
x=DeQueue(Q);
printf("%d\n", x);
}
return 0;
}
无头节点
#include<stdio.h>
typedef struct LinkNode {
int data;
struct LinkNode* next;
} LinkNode;
typedef struct LinkQueue {
struct LinkNode* front;
struct LinkNode* rear;
} LinkQueue;
LinkQueue* InitQueue() {
LinkQueue* Q=(LinkQueue*)malloc(sizeof(LinkQueue));
Q->front=NULL;
Q->rear=NULL;
return Q;
}
void EnQueue(LinkQueue* Q, int x) {
LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
if(Q->front==NULL) Q->front=s;
else Q->rear->next=s;
Q->rear=s;
}
int DeQueue(LinkQueue* Q) {
int x=-1111;
if(Q->rear==NULL) return x;
else {
LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
s=Q->front;
x=s->data;
if(Q->front==Q->rear) Q->front=Q->rear=NULL;
else Q->front=s->next;
free(s);
}
return x;
}
int main() {
LinkQueue* Q=InitQueue();
int n=3;
for(int i=0; i<n; i++) {
int x;
scanf("%d", &x);
EnQueue(Q, x);
}
for(int i=0; i<n+1; i++) {
int x=DeQueue(Q);
printf("%d\n", x);
}
return 0;
}