(七)链式队列的初始化、入队列和出队列

来源:互联网 发布:线性优化的最优解法 编辑:程序博客网 时间:2024/05/17 09:08

链式队列需要有队头指针和队尾指针才能唯一确定一个队列,头指针一般指向头结点,尾指针指向最后一个元素结点。空的队列就是队头指针和队尾指针都指向了头结点。在可以确地长度最大值时采用循环队列,无法估计长度的时候用链式队列。

结构定义

typedef int QElemType;typedef struct QNode{    QElemType data;    struct QNode *next;}QNode,*QueuePtr;typedef struct{    //对头和队尾指针    QueuePtr front,rear;}LinkQueue;
操作函数

//初始化Status InitQueue(LinkQueue *Q){    Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));    if(!Q->front) exit(OVERFLOW);    Q->front->next = NULL;    return OK;}//销毁队列Status DestroyQueue(LinkQueue *Q){    while(Q->front){        Q->rear = Q->front->next;        free(Q->front);        Q->front = Q->rear;    }    return OK;}//插入元素e到队尾Status EnQueue(LinkQueue *Q,QElemType e){    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));    if(!p) exit(OVERFLOW);    p->data = e;    p->next = NULL;    Q->rear->next = p;    Q->rear = p;    return OK;}//出队列Status DeQueue(LinkQueue *Q,QElemType *e){    if(Q->front == Q->rear) return ERROR;    QueuePtr p = Q->front->next;    *e = p->data;    Q->front->next = p->next;    //当队列中最后一个元素被删除了,队列尾指针也丢失了    //因此需要对队尾指针重新赋值    if(Q->rear == p) Q->rear = Q->front;    free(p);    return OK;}Status OutputQueue(LinkQueue Q){    QueuePtr  p = Q.front->next;    while(p){        printf("元素的值是:%d\n",p->data);        p = p->next;    }}
Main函数

int main() {    LinkQueue Q;    InitQueue(&Q);    int x,i;    QElemType e;    printf("请输入要入队列几个数:");    scanf("%d",&x);    for (i = 0; i < x; ++i) {        printf("请输入要入队列元素值:");        scanf("%d",&e);        EnQueue(&Q,e);    }    DeQueue(&Q,&e);    DeQueue(&Q,&e);    OutputQueue(Q);    return 0;}




阅读全文
0 0
原创粉丝点击