<1>链队列
#include<stdio.h>
#include<malloc.h>
//结点的结构体定义
typedef int DataType;
typedef struct qnode
{
DataType data;
struct qnode *next;
}LQNode;
//定义头指针和尾指针
typedef struct
{
LQNode *front;
LQNode *rear;
}LQueue;
//初始化链队列
void QueueInitiate(LQueue *Q)
{
Q->rear=NULL;
Q->front=NULL;
}
//非空否
int QueueNotEmpty(LQueue Q)
{
if(Q.front == NULL)
return 0;
else
return 1;
}
//入队列
void QueueAppend(LQueue *Q,DataType x)
{
LQNode *p;
p=(LQNode *)malloc(sizeof(LQNode));
p->data=x;
p->next=NULL;
if(Q->rear!=NULL) Q->rear->next=p;
Q->rear=p;
if(Q->front == NULL) Q->front=p;
}
//出队列
int QueueDelete(LQueue *Q,DataType *d)
{
LQNode *p;
if(Q->front == NULL)
{
printf("队列已空无数据元素出队列!\n");
return 0;
}
else
{
*d=Q->front->data;
p=Q->front;
Q->front=Q->front->next;
if(Q->front == NULL)
Q->rear=NULL;
free(p);
return 1;
}
}
//取队头数据元素
int QueueGet(LQueue Q,DataType *d)
{
if(Q.front == NULL)
{
printf("队列已空无数据元素出队列!\n");
return 0;
}
else
{
*d = Q.front->data;
return 1;
}
}
int main()
{
LQueue Q;
int x;
QueueInitiate(&Q);
QueueAppend(&Q,10);
QueueAppend(&Q,20);
QueueAppend(&Q,30);
QueueGet(Q,&x);
printf("%d\n",x);
QueueDelete(&Q,&x);
printf("%d\n",x);
QueueGet(Q,&x);
printf("%d\n",x);
return 0;
}
<2> 循环队列
#include<stdio.h>
#define MaxQueueSize 100
//结构体定义
typedef int DataType;
typedef struct
{
DataType queue[MaxQueueSize];
int rear;
int front;
int count;
}SeqCQueue;
//初始化
void QueueInitiate(SeqCQueue *Q)
{
Q->rear = 0;
Q->front = 0;
Q->count = 0;
}
//非空否
int QueueNotEmpty(SeqCQueue Q)
{
if(Q.front != 0)
return 1;
else
return 0;
}
//入队列
int QueueAppend(SeqCQueue *Q,DataType x)
{
if(Q->count > 0 && Q->rear == Q->front)
{
printf("队列已满无法插入!\n");
return 0;
}
else
{
Q->queue[Q->rear]=x;
Q->rear = (Q->rear + 1) % MaxQueueSize;
Q->count++;
return 1;
}
}
//出队列
int QueueDelete(SeqCQueue *Q,DataType *d)
{
if(Q->count == 0)
{
printf("队列已空无数据元素出队列!\n");
return 0;
}
else
{
*d = Q->queue[Q->front];
Q->front = (Q->front+1)%MaxQueueSize;
Q->count--;
return 1;
}
}
//取队头数据元素
int QueueGet(SeqCQueue Q,DataType *d)
{
if(Q.count == 0)
{
printf("队列已空无数据元素可取\n");
return 0;
}
else
{
*d = Q.queue[Q.front];
return 1;
}
}
int main()
{
SeqCQueue Q;
int x;
QueueInitiate(&Q);
QueueAppend(&Q,10);
QueueAppend(&Q,20);
QueueAppend(&Q,30);
QueueGet(Q,&x);
printf("%d\n",x);
QueueDelete(&Q,&x);
printf("%d\n",x);
QueueGet(Q,&x);
printf("%d\n",x);
return 0;
}
链队列、循环队列的实现(初始化、出队、入队、取队头元素、判空)
最新推荐文章于 2024-08-14 21:43:03 发布