#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElementType;
typedef struct Node *PtrToNode;
typedef int Status;
/*队列中的结点*/
struct Node{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode Position;
//队列的头尾指针,分别指向头和尾
struct QNode
{
Position Front,Rear;//队列的头尾指针
int MaxSize; //队列的最大容量
};
typedef struct QNode *Queue;
Status IsEmpty(Queue Q)
{
reutrn( Q->Front == NULL);
}
/**
* 删除队首的结点
* */
ElementType Delete( Queue Q)
{
Position FrontCell;
ElementType FrontElem;
if( IsEmpty(Q))
{
printf("队列空");
return ERROR;
}
else
{
FrontCell = Q->Front;
if(Q->Front == Q->Rear) //如果队列只有一个元素
Q->Front = Q->Rear = NULL;//删除后队列置为空
else
Q->Front = Q->Front->Next;
FrontElem = FrontCell->Data;
free( FrontCell);
return FrontElem;
}
}
/**
* 向队列尾部添加结点
* */
Status Add( Queue Q, ElementType e)
{
PtrToNode newNode = (PtrToNode)malloc(sizeof(struct QNode));
/*存储分配失败*/
if(!newNode)
exit(OVERFLOW);
newNode->Data = e;
newNode->Next = NULL; //新建的结点指向NULL
Q->Rear->Next = newNode; //将新建的结点放在原来最后的后面
Q->Rear = newNode; //把新建的结点设置称为队尾结点,即Rear指向s,指向最后一个结点
}
C语言数据结构队列的插入和删除
最新推荐文章于 2022-05-01 13:59:20 发布