您的位置:首页 > 理论基础 > 数据结构算法

数据结构---C语言之队列的链式表示和实现(链队列)

2017-10-28 14:21 567 查看
#define MAXSIZE 100
#define QElemType int

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
#include<Windows.h>

typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue;

int InitQueue(SqQueue *Q);            //构造一个空队列
int QueueLength(SqQueue Q);           //返回队列长度
int EnQueue(SqQueue *Q, QElemType e); //插入元素e为Q的新的队尾元素
int DeQueue(SqQueue *Q, QElemType *e);//若队列不空,删除Q的队头元素,用e返回其值,并返回1
void TravelQueue(SqQueue Q);          //遍历队列
void ClearQueue(SqQueue *Q);          //清空队列
void DestroyQueue(SqQueue *Q);        //销毁队列

int main()
{
int i;
SqQueue Q;
srand((int)time(0));
InitQueue(&Q);
//初始化链队列
for(i=0;i<10;i++)
EnQueue(&Q,rand()%100);
printf("size of it:%d\n", QueueLength(Q));
TravelQueue(Q);
DestroyQueue(&Q);
TravelQueue(Q);
Sleep(1000);
}
int InitQueue(SqQueue *Q)
{
Q->base = (QElemType*)malloc(MAXSIZE * sizeof(QElemType));
if (!Q->base)
return 0;
Q->front = Q->rear = 0;
return 1;
}

int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}

int EnQueue(SqQueue *Q, QElemType e)
{
if ((Q->rear + 1) % MAXSIZE == Q->front)
{
printf("队列满\n");
return 0;
}
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;       //保证rear在1-maxsize范围内
return 0;
}
int DeQueue(SqQueue *Q, QElemType *e)
{
if (Q->rear == Q->front)
{
printf("队列空\n");
return 0;
}
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;   //保证front在1-maxsize范围内
return 1;
}

void TravelQueue(SqQueue Q)
{
if (Q.front == Q.rear)
{
printf("队列空\n");
return 0;
}
int i = Q.front;
while (i < Q.rear)
{
printf("%d\t", Q.base[i]);
i++;
}
printf("\n");
}

void ClearQueue(SqQueue *Q)
{
Q->front = Q->rear = 0;
}

void DestroyQueue(SqQueue *Q)
{
if (Q->base)
free(Q->base);
Q->base = NULL;
Q->front = Q->rear = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 队列