#include <stdio.h>
#define MAX_STACK_SIZE 100
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Status;
#define MAX_QUEUE_SIZE 100
typedef struct queue
{
ElemType Queue_array[MAX_QUEUE_SIZE];
int front;
int rear;
}SqQueue;
// 设立一个队首指针front,一个队尾指针rear,分 别指向队首和队尾元素
//循环队列
//循环队列的初始化
SqQueue Init_CirQueue(void)
{
SqQueue Q;;
Q.front = Q.rear = 0;
return (Q);
}
//入队操作(将数据元素e插入到循环队列Q的队尾
Status Insert_CirQueue(SqQueue Q,ElemType e)
{
if((Q.rear+1)%MAX_QUEUE_SIZE == Q.front)
return ERROR;
Q.Queue_array[Q.rear] = e;
Q.rear = (Q.rear+1)%MAX_QUEUE_SIZE;
return OK;
}
//出对操作(将循环队列Q的对首元素出队
Status Delete_CirQueue(SqQueue Q,ElemType *x)
{
if(Q.front+1 == Q.rear)
return ERROR;
*x = Q.Queue_array[Q.front];
Q.front = (Q.front+1)%MAX_QUEUE_SIZE;
return OK;
}
//链队运算及指针变化
//定义
//数据元素结点的定义
typedef struct Qnode
{
ElemType data;
struct Qnode *next;
}QNode;
typedef struct link_queue
{
QNode *front,*rear;
}Link_Queue;
//链队的初始化
Link_Queue *Init_LinkQueue(void)
{
Link_Queue *Q;
QNode *p;
p = (QNode *)malloc(sizeof(QNode));
p ->next=NULL;
Q = (Link_Queue *)malloc(sizeof(Link_Queue));
Q->front = Q->rear = p;
return (Q);
}
//链队列的入队操作,将数据元素e插入到链队列Q的队尾
Status Link_Insert_CirQueue(Link_Queue *Q,ElemType e)
{
QNode *p;
p = (QNode *)malloc(sizeof(QNode));
if(!p)
return ERROR;
p->data;
p->next=NULL;
Q->rear->next = p->next;
Q->rear = p;
return OK;
}
//链的队列的出队操作
Status LInk_Delete_CirQueue(Link_Queue *Q,ElemType *x)
{
QNode *p;
if(Q->front == Q->rear)
return ERROR;//队空
p = Q->front->next;
*x = p->data;
Q->front->next = p->next;
if(p == Q->rear)
Q->rear = Q->front;
free(p);
return OK;
}
//链队列的撤销将链队列Q的队首元素出队
void Destroy_LinkQueue(Link_Queue *Q)
{
while(Q->front!= NULL)
{
Q->rear = Q->front->next;
free(Q->front);
Q->front = Q->rear;
}
}
int main()
{
}
队列的一些操作(线性表,链式)
最新推荐文章于 2021-12-19 16:16:14 发布