队列也是对数据的添加的查看有限制的数据结构,队列有“先来先服务”思想。队列又分为顺序队列和链队。
1:顺序队列
顺序队列的数据结构:
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdio.h>
#include <windows.h>
#define MAX 1000
typedef struct{
int data[MAX];
int front;
int rear;
}Queue;
void Init(Queue *q);
int Push(Queue *q, int elem);
int Pop(Queue *q);
void Print(Queue *q);
#endif
顺序队列的相关操作:
#define _CRT_SECURE_NO_WARNINGS 1
#include "Queue.h"
//初始化
void Init(Queue *q){
q->front = 0;
q->rear = 0;
}
//入队
int Push(Queue *q, int elem){
if ((q->rear + 1) % MAX == q->front){
printf("EORRO");
return 0;
}
else{
q->data[q->rear] = elem;
q->rear = (q->rear + 1) % MAX;
}
return 1;
}
//出队
int Pop(Queue *q){
int elem = 0;
if (q->front == q->rear){
printf("Eorro");
return 0;
}
else{
elem = q->data[q->front];
q->front = (q->front +1) % MAX;
}
return elem;
}
//打印队列元素
void Print(Queue *q){
Init(q);
int i = 100;
for (i = 101; i <= 999; i++){
Push(q, i);
}
while (q->front != q->rear){
int data = Pop(q);
int a = data / 100;
int c = data % 10;
int b = (data / 10) % 10;
if (data == a*a*a + b*b*b + c*c*c){
printf("%d ", data);
}
}
}
2:链队是队内元素用单链表的形式存储:
链队的数据结构:
#ifndef _LINKQUEUE_H_
#define _LINKQUEUE_H_
#include <stdio.h>
#include <windows.h>
typedef struct QueueNode{
int data;
struct QueueNode *next;
}*LinkQueuePtr,QueueNode;
typedef struct LinkQueue{
LinkQueuePtr front;
LinkQueuePtr rear;
}LinkQueue;
void Init(LinkQueue *q);
int Push(LinkQueue *q, int elem);
int Pop(LinkQueue *q);
#endif
链队的相关操作:
#define _CRT_SECURE_NO_WARNINGS 1
#include "LinkQueue.h"
//初始化
void Init(LinkQueue *q){
LinkQueuePtr l,r;
l = (LinkQueuePtr)malloc(sizeof(QueueNode));
r = (LinkQueuePtr)malloc(sizeof(QueueNode));
l->next = r;
r->next = NULL;
q->front = l;
q->rear = r;
}
//入队
int Push(LinkQueue *q, int elem){
LinkQueuePtr l;
l = (LinkQueuePtr)malloc(sizeof(QueueNode));
l->data = elem;
l->next = NULL;
q->rear->next = l;
q->rear = l;
return 1;
}
//出队
int Pop(LinkQueue *q){
LinkQueuePtr l;
if (q->front == q->rear){
printf("Eorro");
return 0;
}
l = q->front->next;
q->front->next = l->next;
if (q->rear == l){
q->rear = q->front;
}
free(l);
return 1;
}