ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

顺序队列的基本操作

顺序队列的基本操作 /* 修复后的标准代码请直接复制这段 */#include stdio.h#include stdlib.h#define MaxSize 10typedef int ElemType;/* 队列的结构体定义 */typedef struct {ElemType *data;int front;int rear;} SqQueue;/* 构造一个空队列 */void InitQueue(SqQueue *Q) {Q-data (ElemType*)malloc(MaxSize * sizeof(ElemType));if (!Q-data) exit(0);Q-front Q-rear 0;}/* 销毁队列 */void DestroyQueue(SqQueue *Q) {if (Q-data) free(Q-data);Q-data NULL;Q-front Q-rear 0;}/* 将队列Q清空 */void ClearQueue(SqQueue *Q) {Q-front Q-rear 0;}/* 判断队列是否为空 */int QueueEmpty(SqQueue Q) {if (Q.front Q.rear) return 1;else return 0;}/* 如果队列不空用e返回Q的队头元素 */int GetHead(SqQueue Q, ElemType *e) {if (Q.front Q.rear) return 0;*e Q.data[Q.front];return 1;}/* 插入元素e为队列新的队尾元素 */int EnQueue(SqQueue *Q, ElemType e) {if (Q-rear MaxSize) return 0; /* 队列满 */Q-data[Q-rear] e; /* 将e插在队尾 */Q-rear Q-rear 1; /* 队尾指针加1 */return 1;}/* 返回队列元素的个数 */int QueueLength(SqQueue Q) {return (Q.rear - Q.front);}/* 若队列不空则删除Q的队头元素由e返回其值 */int DeQueue(SqQueue *Q, ElemType *e) {if (Q-front Q-rear) return 0;*e Q-data[Q-front]; /* 将队头元素的值赋给e */Q-front Q-front 1;return 1;}/* 从队头到队尾对队列Q中的每个元素进行输出 */void QueueTraverse(SqQueue Q) {int i Q.front;while (i ! Q.rear) {printf(%2d , Q.data[i]);i i 1;}printf(\n);}/* 主函数 */int main() {int i, m, k, n;ElemType d;SqQueue Q;InitQueue(Q);printf(请输入队列中的%d个元素:\n, MaxSize);for (i 1; i MaxSize; i) {scanf(%d, d);if (d 0) break;EnQueue(Q, d);}printf(当前队列为: );QueueTraverse(Q);printf(判断队列长度: %d\n, QueueLength(Q));k QueueLength(Q);printf(连续%d次由队头删除元素由队尾插入元素:\n, k / 2);for (m 1; m k / 2; m) {DeQueue(Q, d);printf(删除的元素是%d, 请输入要插入的元素: , d);scanf(%d, d);EnQueue(Q, d);}printf(新队列为: );QueueTraverse(Q);n GetHead(Q, d);if (n) {printf(提取队头元素的值: %d\n, d);}printf(清空队列\n);ClearQueue(Q);printf(清空队列后队列是否为空 n%d (1,为空; 0,不为空)\n, QueueEmpty(Q));return 0;}
返回列表