链队列(C语言实现)学习记录

来源:互联网 发布:搜索文件软件 编辑:程序博客网 时间:2024/06/01 11:44

链队列(C语言实现)学习记录


#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0/***内容: 链队*作者:Guozhu Zhu*时间: 2017/11/21*/typedef int ElemType;typedef int Status;typedef struct Node{    ElemType data;    struct Node* next;}Node;typedef struct LinkedQueue{    struct Node* front; //头指针    struct Node* rear; //尾指针}LinkedQueue, *pLinkedQueue;void InitLinkedQueue(pLinkedQueue* Q);//初始链队列Status LinkedQueueEmpty(pLinkedQueue Q);//判空Status enLinkedQueue(pLinkedQueue Q, ElemType e);//入队Status deLinkedQueue(pLinkedQueue Q, ElemType* e);//出队void GetHead(pLinkedQueue Q, ElemType *e);//获取队头元素Status DestroyLinkedQueue(pLinkedQueue Q);//销毁链队列int main(){    pLinkedQueue Q;    ElemType e;    printf("链队列的基本运算\n");    printf("(1)初始化链队列\n");    InitLinkedQueue(&Q);    printf("(2)判空\n");    if(LinkedQueueEmpty(Q) == 1){        printf("空\n");    } else {        printf("非空\n");    }    printf("(3)入队\n");    enLinkedQueue(Q, 1);    enLinkedQueue(Q, 2);    enLinkedQueue(Q, 3);    printf("(4)判空\n");    if(LinkedQueueEmpty(Q) == 1){        printf("空\n");    } else {        printf("非空\n");    }    printf("(5)获取队头元素\n");    GetHead(Q, &e);    printf("%d\n", e);    printf("(6)出队 \n");    while(LinkedQueueEmpty(Q) != 1){        deLinkedQueue(Q, &e);        printf("%d\n", e);    }    printf("(7)销毁链队列\n");    DestroyLinkedQueue(Q);    return 0;}//初始化链队列void InitLinkedQueue(pLinkedQueue* Q){    (*Q) = (struct LinkedQueue*)malloc(sizeof(struct LinkedQueue));    (*Q)->front = (*Q)->rear = NULL; //初始化时指向为空}//判空Status LinkedQueueEmpty(pLinkedQueue Q){    return (Q->rear == NULL);}//入队Status enLinkedQueue(pLinkedQueue Q, ElemType e){    struct Node* p;    p = (struct Node*)malloc(sizeof(struct Node));    p->data = e;    p->next = NULL;    if(Q->front == NULL){        Q->front = Q->rear = p;    } else {        Q->rear->next = p;        Q->rear = p;    }    return TRUE;}//出队Status deLinkedQueue(pLinkedQueue Q, ElemType *e){    struct Node* t; //保存删除的节点    if (Q->rear == NULL) {//队列为空时        return FALSE;    } else {        t = Q->front;        if (Q->front == Q->rear) { //当只有一个节点时            Q->front = Q->rear = NULL;        } else { //当有多个节点时            Q->front = Q->front->next;        }        (*e) = t->data;        free(t);    }    return TRUE;}//获取队头元素void GetHead(pLinkedQueue Q, ElemType *e){    if(Q->front == Q->rear){        return ;    }    (*e) = Q->front->data;    return ;}//销毁Status DestroyLinkedQueue(pLinkedQueue Q){    struct Node* p = Q->front, *r;    if(p != NULL){        r = p->next;        while(r != NULL){            free(p);            p = r;            //r = r->next;            r = p->next;        }    }    free(p);    free(Q);    return TRUE;}




分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正共同进步