数据机构(链队)

数据机构(链队)

数据结构教程(第6版)118页实验4

主函数

//
// Created by Snow on 2023/3/14.
//
#include"liqueue.cpp"
int main()
{
    int choice;
    LiQueue *q=nullptr;
    PrintCommand();
    while(1)
    {
        printf("\n请输入下一个操作:\n");
        scanf("%d",&choice);
        Choice(q,choice);
    }
}

实现函数

//
// Created by Snow on 2023/3/14.
//
#include<cstdio>
#include<windows.h>
typedef char ElemType;
typedef struct qnode{
    ElemType data;
    struct qnode *next;
}DataNode;
typedef struct
{
    DataNode *front;
    DataNode *rear;
}LiQueue;
//打印菜单
void PrintCommand()
{
    printf("             欢迎使用链队操作系统\n\n");
    printf("1.初始化链队q                        2.判断链队q是否非空\n");
    printf("3.依次进链队元素a,b,c                4.出队一个元素,输出该元素\n");
    printf("5.依次进链队元素d,e,f                6.输出出队序列\n");
    printf("7.释放链队                           0.结束程序\n");
}
bool InitQueue(LiQueue *&q)
{
    if(q!=nullptr)
    {
        printf("链队已存在!\n");
        return false;
    }
    q=(LiQueue *)malloc(sizeof(LiQueue));
    if(q==nullptr)
    {
        printf("链队初始化失败!\n");
        return false;
    }
    q->front=q->rear=nullptr;
    return true;
}
bool DestroyQueue(LiQueue *&q)
{
    if(q==nullptr)
    {
        printf("链队不存在!\n");
        return false;
    }
    DataNode *pre=q->front,*p;
    if(pre!=nullptr)
    {
        p=pre->next;
        while(p!=nullptr)
        {
            free(pre);
            pre=p;
            p=p->next;
        }
        free(pre);
    }
    free(q);
    return true;
}
bool QueueEmpty(LiQueue *q)
{
    if(q==nullptr)
    {
        printf("链队不存在!\n");
        return false;
    }
    if(q->rear==nullptr)printf("空队!\n");
    else printf("已储存数据!\n");
    return true;
}
bool enQueue(LiQueue *&q,ElemType e)
{
    if(q==nullptr)
    {
        printf("链队不存在!\n");
        return false;
    }
    DataNode *p;
    p=(DataNode *)malloc(sizeof(DataNode));
    p->data=e;
    p->next=nullptr;
    if(q->rear==nullptr)
        q->front=q->rear=p;
    else
    {
        q->rear->next=p;
        q->rear=p;
    }
    return true;
}
bool deQueue(LiQueue *&q,ElemType &e)
{
    if(q==nullptr)
    {
        printf("链队不存在!\n");
        return false;
    }
    if(q->rear==nullptr)
        return false;
    DataNode *r;
    r=q->front;
    if(q->rear==q->front)
        q->rear=q->front=nullptr;
    else
        q->front=r->next;
    e=r->data;
    free(r);
    return true;
}
bool disQueue(LiQueue *q)
{
    if(q==nullptr)
    {
        printf("链队不存在!\n");
        return false;
    }
    DataNode *p=q->front;
    while(p!=nullptr)
    {
        printf("%c ",p->data);
        p=p->next;
    }
    printf("\n");
    return true;
}
//选择操作
bool Choice(LiQueue *&q, int i)
{
    bool OK;
    ElemType e,arr[]={'a','b','c'};ElemType str[]={'d','e','f','\0'};
    int j;
    switch(i)
    {
        case 1:
            OK=InitQueue(q);
            if(OK)printf("初始化操作成功!\n");
            else printf("初始化操作失败!\n");
            break;
        case 2:
            OK=QueueEmpty(q);
            if(OK)printf("判断队空操作成功!\n");
            else printf("判断队空操作失败!\n");
            break;
        case 3:
            for(j=0;arr[j]!='\0';j++)
            {
                OK= enQueue(q,arr[j]);
                if(OK)printf("进队操作成功!\n");
                else printf("进队操作失败!\n");
            }
            break;
        case 4:
            OK=deQueue(q,e);
            if(OK)
            {
                printf("出队元素为%c\n",e);
                printf("元素出队操作成功!\n");
            }
            else printf("元素出队操作失败!\n");
            break;
        case 5:
            for(j=0;str[j]!='\0';j++)
            {
                OK= enQueue(q,str[j]);
                if(OK)printf("进队操作成功!\n");
                else printf("进队操作失败!\n");
            }
            break;
        case 6:
            OK=disQueue(q);
            if(OK)printf("输出出队操作成功!\n");
            else printf("输出出队操作失败!\n");
            break;
        case 7:
            OK= DestroyQueue(q);
            if(OK)printf("销毁队列操作成功!\n");
            else printf("销毁队列操作失败!\n");
            break;
        case 0:
            printf("感谢使用!下次再见!\n");
            system("pause");
            exit(0);
        default:printf("指令错误,请再尝试一次\n");
    }
}

GBK编码

posted @ 2023-03-14 20:36  SnowDreamXUE  阅读(8)  评论(0)    收藏  举报  来源