寿光专业做网站的公司,网站备案登录密码找回,新网站多久被收录,个人申请网址什么条件顺序队列是队列的顺序存储结构#xff0c;顺序队列实际上是运算受限的顺序表。和顺序表一样#xff0c;顺序队列用一个向量空间来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的#xff0c;设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置…顺序队列是队列的顺序存储结构顺序队列实际上是运算受限的顺序表。和顺序表一样顺序队列用一个向量空间来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置它们的初值在队列初始化时均应设置为0。 头文件 SqQueue.h
#ifndef _SQUEUE_H__
#define _SQUEUE_H__
#include error.h#define TRUE 1
#define FALSE 0#define SIZE 10
typedef int QueueData;
typedef struct _queue
{QueueData data[SIZE];int front; // 指向队头的下标int rear; // 指向队尾的下标
}Queue;// 置空队
int InitQueue (Queue* q);// 判队空否
int QueueEmpty (Queue* q);// 判队满否
int QueueFull (Queue* Q);// 进队
int EnQueue (Queue* q, QueueData x);// 出队
int DeQueue (Queue* s, QueueData *x);// 取队头
int GetFront (Queue* s, QueueData *x);#endif // _SQUEUE_H__
源文件 SqQueue.c
#include SqQueue.h// 置空队
int InitQueue (Queue* q)
{if (NULL q){errno ERROR;return FALSE;}// 置空队q-front 0;q-rear 0;return TRUE;
}// 判队空否
int QueueEmpty (Queue* q)
{if (NULL q){errno ERROR;return FALSE;}return (q-front q-rear);
}// 判队满否
int QueueFull (Queue* q)
{if (NULL q){errno ERROR;return FALSE;}return (q-front (q-rear1) % SIZE);
}// 进队
int EnQueue (Queue* q, QueueData x)
{if (NULL q){errno ERROR;return FALSE;}if (QueueFull(q)){errno FULL_QUEUE;return FALSE;}q-data[(q-rear) % SIZE] x;return TRUE;
}// 出队
int DeQueue (Queue* q, QueueData *x)
{if (NULL q){errno ERROR;return FALSE;}if (QueueEmpty(q)){errno EMPTY_QUEUE;return FALSE;}*x q-data[(q-front) % SIZE];return TRUE;
}// 取队头
int GetFrontf (Queue* q, QueueData *x)
{if (NULL q){errno ERROR;return FALSE;}if (QueueEmpty(q)){errno EMPTY_QUEUE;return FALSE;}*x q-data[(q-front 1) % SIZE];return TRUE;
}
链式队列 链式队列没有空间溢出的问题 头文件 LinkQueue.h
#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
#include error.h#define TRUE 1
#define FALSE 0typedef int QueueData;
typedef struct _node
{QueueData data;struct _node* next;
}Node;typedef struct _queue
{Node* front;Node* rear;
}Queue;// 创建队列
Queue* Create_Queue ();// 置空队列
int QueueEmpty (Queue* q);// 进队
int EnQueue (Queue* q, QueueData x);// 出队
int DeQueue (Queue* q, QueueData *x);// 取队头
int GetFront (Queue* q, QueueData *x);// 销毁队列
int Destroy_Queue (Queue *q);#endif
源文件 LinkQueue.c
#include LinkQueue.h
#include stdlib.h// 创建队列
Queue* Create_Queue ()
{Queue* q (Queue*) malloc(sizeof(Queue)/sizeof(char));if (NULL q){errno MALLOC_ERROR;return NULL;}// 置空队q-front NULL;q-rear NULL;return q;
}// 置空队
int QueueEmpty (Queue* q)
{if (NULL q){errno ERROR;return FALSE;}return q-front NULL;
}// 进队
int EnQueue (Queue* q, QueueData x)
{if (NULL q){errno ERROR;return FALSE;}Node* node (Node*) malloc(sizeof(Node)/sizeof(char));if (NULL node){errno MALLOC_ERROR;return FALSE;}node-data x;node-next NULL;if (NULL q-front){q-front node;q-rear node;}else {q-rear-next node;q-rear node;}return TRUE;
}// 出队
int DeQueue (Queue* q, QueueData *x)
{if (NULL q){errno ERROR;return FALSE;}if (QueueEmpty(q)){errno EMPTY_QUEUE;return FALSE;}Node* p q-front;*x p-data;q-front p-next;free(p);if (NULL q-front){q-rear NULL;}return TRUE;}// 取队头
int GetFront (Queue* q, QueueData *x)
{if (NULL q){errno ERROR;return FALSE;}if (QueueEmpty(q)){errno EMPTY_QUEUE;return FALSE;}*x q-front-data;return TRUE;
}// 销毁队列
int Destroy_Queu (Queue* q)
{if (NULL q){errno ERROR;return FALSE;}int x;while (TRUE ! QueueEmpty(q)){DeQueue (q, x);}free(q);return TRUE;
}