链式队列

来源:互联网 发布:局域网ip冲突 软件 编辑:程序博客网 时间:2024/06/12 01:13
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{        int val;    struct Node * pNext;}Node,* PNode;typedef struct Queue{        PNode pHead;    PNode pTail;}Queue,* PQueue;void init_queue(PQueue q);void queue_shift(PQueue q,int val);void show_queue(PQueue q);int queue_unshift(PQueue q);int is_empty(PQueue q);void clear_queue(PQueue q);int main(void){    Queue q;    init_queue(&q);    queue_shift(&q,1);    queue_shift(&q,3);    queue_shift(&q,2);    queue_shift(&q,4);    show_queue(&q);    printf("弹出的是:%d\n", queue_unshift(&q));    printf("弹出的是:%d\n", queue_unshift(&q));    show_queue(&q);    clear_queue(&q);    printf("%s\n", "清空之后的结果是:");    show_queue(&q);    return 0;}void init_queue(PQueue q){        q->pHead = (PNode)malloc(sizeof(Node));    q->pTail = q->pHead;    q->pTail->pNext=NULL;}void queue_shift(PQueue q,int val){    PNode pNew = (PNode)malloc(sizeof(Node));    pNew->val=val;    q->pTail->pNext=pNew;    pNew->pNext=NULL;    q->pTail=pNew;}void show_queue(PQueue q){    PNode temp = q->pHead->pNext;    while(temp!=NULL){        printf("%d ", temp->val);        temp=temp->pNext;    }}int queue_unshift(PQueue q){    if(is_empty(q)){        printf("%s\n", "链表已经是空的了!不能够弹出了!");        return;    }    PNode temp = q->pHead->pNext;    int val = temp->val;    q->pHead->pNext = temp->pNext;        free(temp);    temp = NULL;    if(q->pHead->pNext==NULL){        q->pTail=q->pHead;    }    return val;}int is_empty(PQueue q){    if(q->pHead==q->pTail){        return 1;    }else{        return 0;    }}void clear_queue(PQueue q){    while(!is_empty(q)){        queue_unshift(q);    }}

0 0
原创粉丝点击