队列的一些操作(线性表,链式)

来源:互联网 发布:耳机煲机软件 编辑:程序博客网 时间:2024/05/16 12:03
#include <stdio.h>#define MAX_STACK_SIZE 100#define ERROR 0#define OK 1typedef int ElemType;typedef int Status;#define MAX_QUEUE_SIZE 100typedef 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(){}
原创粉丝点击