数据结构——第二讲、线性结构(8)

来源:互联网 发布:怎么购买域名 编辑:程序博客网 时间:2024/05/17 02:16

2.3 队列

插入(入队AddQ)和删除(出队DeleteQ)位于队列两头。

队列的抽象数据类型描述
类型名称:队列(Queue)
数据对象集:一个有0个或多个元素的又穷线性表。
操作集:

Queue CreateQueue(int MaxSize);int IsFull(Queue Q, int MaxSize);void AddQ(Queue Q, ElementType x);int IsEmpty(Queue Q);ElementTpye DeleteQ(Queue Q);

队列的顺序存储实现

#define MaxSize<队列的最大个数>typedef struct QNode *Queue;struct QNode{    ElementType Data[MaxSize];    front;//队列头    rear;//队列尾};

入队

void AddQ(Queue Q, ElementType x){    if((Q->rear+1)%MaxSize == Q->front){        printf("队列满");        return;    }    Q->rear = (Q->rear+1)%MaxSize;    Q->Data[Q->rear] = x;}

出队

ElementType DeleteQ(Queue Q){    if(Q->rear == Q->front){        printf("队列空");        return NULL;    }    Q->front = (Q->front+1)%MaxSize;    return Q->Data[Q->front];}

队列的链式存储
front设在链表头,rear设在链表尾

typedef struct Node *Liststruct Node{    ElementType Data;    List NEXT;};struct QNode{    List front;    List rear;};typedef struct QNode *Queue//一个QNode类型的指针,不同的指针表示不同的队列。

入队

void AddQ(Queue Q, ElementType x){    List s = (List)malloc(sizeof(struct Node));    s->Data = x;    s->NEXT = NULL;    if(Q->rear == NULL){        Q->rear = s;        return;    }    Q->rear->NEXT = s;    Q->rear = s;    return;}

出队

ElementType DeleteQ(Queue Q){    if(Q->front == NULL){        printf("栈空!");        return NULL;    }    //如果只有一个元素,就把rear和front都置为NULL    if(Q->rear == Q->front)Q->rear = NULL;    List s = Q->front;    ElementType x = s->Data;    //如果只有一个元素那么s的NEXT就是NULL    Q->front = s->NEXT;    free(s);    return x;}
阅读全文
0 0
原创粉丝点击