(数据结构)利用 C语言实现顺序队列及链队列
时间: 2023-05-24 08:05:38 浏览: 91
顺序队列的实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct{
int data[MAXSIZE];
int front,rear; // front,rear分别指向队头和队尾位置
}SqQueue;
// 初始化队列
void InitQueue(SqQueue *q){
q->front = q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(SqQueue q){
if(q.front == q.rear) // 队列为空的条件
return 1;
else
return 0;
}
// 入队操作
int EnQueue(SqQueue *q, int x){
if((q->rear+1) % MAXSIZE == q->front) // 队列满的条件
return 0;
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
return 1;
}
// 出队操作
int DeQueue(SqQueue *q, int *x){
if(q->front == q->rear) // 队列为空的条件
return 0;
*x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return 1;
}
int main(){
SqQueue q;
int i,x;
InitQueue(&q);
for(i=0; i<5; i++){
scanf("%d",&x);
EnQueue(&q,x);
}
while(!IsEmpty(q)){
DeQueue(&q,&x);
printf("%d ",x);
}
return 0;
}
```
链队列的实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front,rear; // front指向队头,rear指向队尾
}LinkQueue;
// 初始化队列
void InitQueue(LinkQueue *q){
q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!q->front)
exit(1); // 分配空间失败,直接退出
q->front->next = NULL;
}
// 判断队列是否为空
int IsEmpty(LinkQueue q){
if(q.front == q.rear) // 队列为空的条件
return 1;
else
return 0;
}
// 入队操作
int EnQueue(LinkQueue *q, int x){
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p)
return 0; // 分配空间失败,返回0
p->data = x;
p->next = NULL;
q->rear->next = p;
q->rear = p;
return 1;
}
// 出队操作
int DeQueue(LinkQueue *q, int *x){
if(q->front == q->rear) // 队列为空的条件
return 0;
QueuePtr p = q->front->next;
*x = p->data;
q->front->next = p->next;
if(q->rear == p) // 若队列中只有一个元素,那么p出队后,rear也需要改变
q->rear = q->front;
free(p);
return 1;
}
int main(){
LinkQueue q;
int i,x;
InitQueue(&q);
for(i=0; i<5; i++){
scanf("%d",&x);
EnQueue(&q,x);
}
while(!IsEmpty(q)){
DeQueue(&q,&x);
printf("%d ",x);
}
return 0;
}
```