赞
踩
出队、入队。
#include <stdio.h> #include <stdlib.h> #define Status bool #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define STRINGSIZE 30 typedef int QElemType; int QueueSize = 10; typedef struct { QElemType *base; // 初始化的动态分配 int font; // 头指针 int reat; // 尾指针 }SqQueue; Status InitQueue(SqQueue &q); // 构造空队列 Status EnQueue(SqQueue &q, QElemType e); // 入队 Status DeQueue(SqQueue &q, QElemType &e); // 出队 Status DestroyQueue(SqQueue &q); // 销毁队列 Status InitQueue(SqQueue &q) { q.base = (QElemType *)malloc(QueueSize * sizeof(QElemType)); if (q.base == NULL) { exit(OVERFLOW); } q.font = 0; q.reat = 0; return OK; } Status EnQueue(SqQueue &q, QElemType e) { // 判断队是否满了,满了无法入队 if ((q.reat + 1) % QueueSize == q.font ) { printf("队列已满!\n"); return ERROR; } *(q.base + q.reat) = e; q.reat ++; q.reat = q.reat % QueueSize; return OK; } Status DeQueue(SqQueue &q, QElemType &e) { // 判断队是否空了,空了无法出队 if (q.reat == q.font) { printf("队伍为空,无法出队!\n"); e = NULL; return ERROR; } e = *(q.base + q.font); q.font++; q.font = q.font % QueueSize; } Status DestroyQueue(SqQueue &q) { free(q.base); return OK; } int main() { int e; SqQueue q; InitQueue(q); return 0; }
出队、入队、求队伍的长度、销毁队列(垃圾回收)。
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef int QElemType; typedef bool Status; typedef struct QNode { QElemType data; struct QNode *next; }QNode, *QueuePtr; typedef struct { QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 }LinkQueue; Status InitQueue( LinkQueue &q); // 初始化队列 Status EnQueue(LinkQueue &q, QElemType e); // 入队 Status DeQueue(LinkQueue &q, QElemType &e); // 出队 Status DestroyQueue(LinkQueue &q); // 销毁链队列 int QueueLenth(LinkQueue &q); // 求队长 // 队列初始化 Status InitQueue( LinkQueue &q) { q.front = q.rear = (QueuePtr)malloc(sizeof(QNode)); // 头结点 if (q.front == NULL || q.rear == NULL) { printf("内存分配失败!\n"); exit(OVERFLOW); } q.front->data = q.rear->data = NULL; q.front->next = NULL; return OK; } //入队 Status EnQueue(LinkQueue &q, QElemType e) { // 判斷节点值是非为NULL // 创建节点 QueuePtr n = (QueuePtr)malloc(sizeof(QNode)); if (n == NULL) { printf("入队失败!"); exit(OVERFLOW); } n->data = NULL; n->next = NULL; if (q.rear->data == NULL) { q.rear->data = e; q.rear->next = n; q.rear = n; return OK; } else { return ERROR; } } //出队 Status DeQueue(LinkQueue &q, QElemType &e) { // 判断节点是否为空 // 临时通用指针 void *p; p = q.front; if (q.front == q.rear) { printf("队列为空不能出队!\n"); e = NULL; return ERROR; } else { e = q.front->data; q.front = q.front->next; } free(p); return OK; } // 销毁队列 Status DestroyQueue(LinkQueue &q) { // 临时指针 QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode)); do { p = q.front; q.front = q.front->next; printf("%d ", p->data); free(p); }while(q.front != NULL); } // 求队列长度 int QueueLenth(LinkQueue &q) { int size; while(q.front != q.rear) { size++; q.front = q.front->next; } return size; } int main() { LinkQueue q; QElemType e; InitQueue(q); DestroyQueue(q); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。