队列的顺序存储与链式存储c语言实现
2020-12-22 05:29
标签:类型 int 循环 图片 顺序 src 删除 amp view 一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表。 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环。 循环队列状态: 初始时:Q.front=Q.rear=0 front指针移动:Q.front=(Q.front+1)%MaxSize rear指针移动:Q.rear=(Q.rear+1)%MaxSize 队列长度:(Q.rear+MaxSize-Q.front)%MaxSize 队空条件:Q.front=Q.rear 队满条件:Q.front=Q.rear 3.区分队空和队满的三种处理 1)牺牲一个存储单元来区分队空和队满 队满条件:(Q.rear+1)%MaxSize=Q.front 队空条件:Q.front=Q.rear 队中元素个数:(Q.rear+MaxSize-Q.front)%MaxSize 2)类型中增设表示元素个数的数据成员 队空条件:Q.front=Q.rear && Q.size=0 队满条件:Q.front=Q.rear && Q.size=MaxSize 3)类型中增设tag数据成员,以区分队空还是队满 tag=0时,若因删除导致Q.front=Q.rear,则为队空 tag=1时,若因插入导致Q.front=Q.rear,则为队满 二. 循环队列的顺序存储操作 1.结构描述 2.初始化队列 3.判断队列是否为空 4.判断队列是否为满 5.入队 6.出队 7.完整代码 运行示例: 三. 队列的链式存储 链队列:同时带有队头指针和队尾指针的单链表。 1.结构描述 2.链队列初始化 3.判断队列是否为空 4.入队 5.出队 6.完整代码 运行示例: 队列的顺序存储与链式存储c语言实现 标签:类型 int 循环 图片 顺序 src 删除 amp view 原文地址:https://www.cnblogs.com/hky8220/p/13216825.htmltypedef struct Queue{
ElemType data[MaxSize];
int front,rear,size;
}Queue;
Queue InitQueue()
{
Queue Q;
Q.front=Q.rear=Q.size=0;
return Q;
}
int Queue_Empty(Queue Q)
{
if(Q.front==Q.rear&&Q.size==0)
return TRUE;
else
return FALSE;
}
int Queue_Full(Queue Q)
{
if(Q.front==Q.rear&&Q.size==MaxSize)
return TRUE;
else
return FALSE;
}
int InQueue(Queue *q)
{
if(Queue_Full(*q))
return FALSE;
ElemType x;
printf("输入入队元素:");
scanf("%d",&x);
q->data[q->rear]=x;
q->rear=(q->rear+1)%MaxSize;
q->size++;
return TRUE;
}
int OutQueue(Queue *q,ElemType *x)
{
if(Queue_Empty(*q))
return FALSE;
*x=q->data[q->front];
q->front=(q->front+1)%MaxSize;
q->size--;
return TRUE;
}
#include
typedef struct Node{
ElemType data;
struct Node *next;
}Node;
typedef struct Queue{
struct Node *front,*rear;
}Queue;
Queue InitQueue()
{
Queue Q;
Q.front=Q.rear=(Node*)malloc(sizeof(Node));
Q.front->next=NULL;
return Q;
}
int Queue_Empty(Queue Q)
{
if(Q.front==Q.rear)
return TRUE;
else
return FALSE;
}
void InQueue(Queue *q)
{
ElemType x;
printf("输入入队元素:");
scanf("%d",&x);
Node *p=(Node*)malloc(sizeof(Node));
p->data=x;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
int OutQueue(Queue *q,ElemType *x)
{
if(Queue_Empty(*q))
{
return FALSE;
}
Node *p=q->front->next;
*x=p->data;
q->front->next=p->next;
if(q->rear==p)
{
q->rear=q->front;
}
free(p);
return TRUE;
}
#include
下一篇:C#中线程的委托