数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素——完整可运行代码
#include <stdio.h>#define MAXSIZE 100
typedef int ElemType;typedef struct
{ElemType data[MAXSIZE];int front;int rear;}Queue;//初始化
void initQueue(Queue *Q)
{Q->front = 0;Q->rear = 0;
}//判断队列是否为空
int isEmpty(Queue *Q)
{if (Q->front == Q->rear){printf("空的\n");return 1;}else{return 0; }
}//出队
ElemType dequeue(Queue *Q)
{if (Q->front == Q->rear){printf("空的\n");return 0;}ElemType e = Q->data[Q->front];Q->front++;return e;
}
//队尾满了,调整队列(挪位置)
int queueFull(Queue *Q)
{if (Q->front > 0)//队尾满了,但是队列还有空间{int step = Q->front;for (int i = Q->front; i <= Q->rear; ++i){Q->data[i - step] = Q->data[i];}Q->front = 0;Q->rear = Q->rear - step;return 1;}else{printf("真的满了\n");return 0;}
}//入队
int equeue(Queue *Q, ElemType e)
{if (Q->rear >= MAXSIZE){if(!queueFull(Q)){return 0;}}Q->data[Q->rear] = e;Q->rear++;return 1;
}//获取队头元素(数据)
int getHead(Queue *Q, ElemType *e)
{if (Q->front == Q->rear){printf("空的\n");return 0;}*e = Q->data[Q->front];return 1;
}int main()
{Queue q;initQueue(&q);equeue(&q, 10);equeue(&q, 20);equeue(&q, 30);equeue(&q, 40);equeue(&q, 50);//分别入队10,20,30,40,50printf("%d\n",dequeue(&q));printf("%d\n",dequeue(&q));//10,20出队列ElemType e;getHead(&q, &e);//获取此时队头的数据printf("%d\n",e);return 0;
}
动态分配内存:
#include <stdio.h>
#include <stdlib.h>#define MAXSIZE 100
typedef int ElemType;typedef struct
{ElemType *data;int front;int rear;}Queue;//初始化
Queue* initQueue()
{Queue *q = (Queue*)malloc(sizeof(Queue));q->data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);q->front = 0;q->rear = 0;return q;
}//判断队列是否为空
int isEmpty(Queue *Q)
{if (Q->front == Q->rear){printf("空的\n");return 1;}else{return 0; }
}//出队
ElemType dequeue(Queue *Q)
{if (Q->front == Q->rear){printf("空的\n");return 0;}ElemType e = Q->data[Q->front];Q->front++;return e;
}
//队尾满了,调整队列
int queueFull(Queue *Q)
{if (Q->front > 0){int step = Q->front;for (int i = Q->front; i <= Q->rear; ++i){Q->data[i - step] = Q->data[i];}Q->front = 0;Q->rear = Q->rear - step;return 1;}else{printf("真的满了\n");return 0;}
}//入队
int equeue(Queue *Q, ElemType e)
{if (Q->rear >= MAXSIZE){if(!queueFull(Q)){return 0;}}Q->data[Q->rear] = e;Q->rear++;return 1;
}//获取队头元素
int getHead(Queue *Q, ElemType *e)
{if (Q->front == Q->rear){printf("空的\n");return 0;}*e = Q->data[Q->front];return 1;
}int main()
{Queue *q = initQueue();equeue(q, 10);equeue(q, 20);equeue(q, 30);equeue(q, 40);equeue(q, 50);printf("%d\n",dequeue(q));printf("%d\n",dequeue(q));ElemType e;getHead(q, &e);printf("%d\n",e);return 0;
}