合肥工业大学 宣城校区 数据结构与算法实验 队列、二叉树、查找和排序

这篇具有很好参考价值的文章主要介绍了合肥工业大学 宣城校区 数据结构与算法实验 队列、二叉树、查找和排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

队列

1.实验目标

熟练掌握队列的顺序存储结构和链式存储结构。
熟练掌握队列的有关算法设计,并在循环顺序队列和链队列上实现。
根据具体给定的需求,合理设计并实现相关结构和算法。

2.实验内容和要求

循环顺序队列的实验要求
循环顺序队列结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现;
实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求;
程序有适当的注释。

链队列实验要求
本次实验中的链队列结构指不带头结点的单链表;
链队列结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现;
实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求;
程序有适当的注释。

循环顺序队列实验任务
<1>初始化一个队列。
<2>判断是否队空。
<3>判断是否队满。
设队列最大长度:MaxLen=100
第一组数据:入队n个元素,判断队满
第二组数据:用循环方式将1到99,99个元素入队,判队满
<4>入队
第一组数据:4,7,8,12,20,50
第二组数据:a,b,c,d,f,g
<5>出队
<6>取队头元素
<7>求当前队列中元素个数
<8>编写算法实现
①初始化空循环队列;
②当键盘输入奇数时,此奇数入队;
③当键盘输入偶数时,队头出队;
④当键盘输入0时,算法退出;
⑤每当键盘输入后,输出当前队列中的所有元素。

链队列实验任务
<1>初始化一个队列。
<2>判断是否队空。
<3>判断是否队满。
设队列最大长度:MaxLen=100
第一组数据:入队n个元素,判断队满
第二组数据:用循环方式将1到99,99个元素入队,判队满
<4>入队
第一组数据:4,7,8,12,20,50
第二组数据:a,b,c,d,f,g
<5>出队
<6>取队头元素
<7>求当前队列中元素个数
<8>编写算法实现
①初始化空循环队列;
②当键盘输入奇数时,此奇数入队;
③当键盘输入偶数时,队头出队;
④当键盘输入0时,算法退出;
⑤每当键盘输入后,输出当前队列中的所有元素。

3.数据结构设计文章来源地址https://www.toymoban.com/news/detail-501326.html

#ifndef QUEUELIST_H_INCLUDED
#define QUEUELIST_H_INCLUDED
#include<stdio.h>
#include<stdlib.h>
#define maxlen 100

typedef struct squeue
{
   
    int data[maxlen];
    int lfront;
    int lrear;
}seqqueue;

typedef struct cqueue
{
   
    char data[maxlen];
    int lfront;
    int lrear;
}seqcqueue;

typedef struct lnode
{
   
    int data;
    struct lnode *next;
}node;

typedef struct
{
   
    node *sfront;
    node *srear;
}linkqueue;

typedef struct lcnode
{
   
    char data;
    struct lcnode *next;
}cnode;

typedef struct
{
   
    cnode *cfront;
    cnode *crear;
}linkcqueue;

void initialqueue(seqqueue q);
int queueempty(seqqueue q);
int queuefull(seqqueue q);
void enqueue(seqqueue q,int x);
void outqueue(seqqueue q);
void queuefront(seqqueue q,int x);
void queueall(seqqueue q);
void ssqueue(seqqueue q);
void encqueue(seqcqueue q,char x);

void initqueue(linkqueue q);
int queuelempty(linkqueue q);
int queuelfull(linkqueue q);
void enlqueue(linkqueue q,int x);
void outlqueue(linkqueue q);
void queuelfront(linkqueue q,int x);
void queuelall(linkqueue q);
void sslqueue(linkqueue q);
void enclqueue(linkcqueue q,char a);

seqqueue creatqueue(void)
{
   
    seqqueue l;
    int x;

    l.lfront = 0;
    l.lrear = 0;

    printf("向队列中输入元素。(输入9999停止)\n");
    scanf("%d",&x);
    while(x!=9999)
    {
   
        l.lrear = ((l.lrear+1)%maxlen);
        l.data[l.lrear] = x;
        scanf("%d",&x);
    }
    return l;
}

seqcqueue creatcqueue(void)
{
   
    seqcqueue l;
    char x;

    l.lfront = 0;
    l.lrear = 0;

    printf("向队列中输入元素。(输入0停止)\n");
    scanf("%s",&x);
    while(x!='0')
    {
   
        l.lrear = ((l.lrear+1)%maxlen);
        l.data[l.lrear] = x;
        scanf("%s",&x);
    }
    return l;
}

linkqueue creatlqueue(void)
{
   
    linkqueue l;
    int x;
    node *p,*r;
    l.sfront = (node *)malloc(sizeof(node));
    l.srear = l.sfront;
    l.sfront->next = NULL;
    r = l.sfront;

    printf("向队列中输入元素。(输入9999停止)\n");
    scanf("%d",&x);
    while(x!=9999)
    {
   
        p = (node *)malloc(sizeof(node));
        p->data = x;
        p->next = NULL;
        l.srear = p;
        r->next = p;
        r = p;
        scanf("%d",&x);
    }
    return l;
}

linkcqueue creatclqueue(void)
{
   
    linkcqueue l;
    char x;
    cnode *p;
    l.cfront = (cnode *)malloc(sizeof(cnode));
    l.crear = l.cfront;
    l.cfront->next = NULL;

    printf("向队列中输入元素。(输入0停止)\n");
    scanf("%c",&x);

    while(x!='0')
    {
   
        p = (cnode *)malloc(sizeof(cnode));
        p->data = x;
        p->next = NULL;
        l.crear->next = p;
        l.crear = p;
        scanf("%c",&x);
    }
    return l;
}

void menu(void)
{
   
    int m;
    loop:
    printf("循环顺序队列实验任务:\n");
    printf("<1>初始化一个队列。\n");
    printf("<2>判断是否队空。\n");
    printf("<3>判断是否队满。\n");
    printf("<4>入队。(数字)\n");
    printf("<5>入队。(字母)\n");
    printf("<6>出队。\n");
    printf("<7>取队头元素。\n");
    printf("<8>求当前队列中元素个数。\n");
    printf("<9>编写算法实现功能。\n");
    printf("\n");

    printf("链队列实验任务:\n");
    printf("<10>初始化一个队列。\n");
    printf("<11>判断是否队空。\n");
    printf("<12>判断是否队满。\n");
    printf("<13>入队。(数字)\n");
    printf("<14>入队。(字母)\n");
    printf("<15>出队。\n");
    printf("<16>取队头元素。\n");
    printf("<17>求当前队列中元素个数。\n");
    printf("<18>编写算法实现功能。\n");
    printf("\n");

    printf("<19>清屏。\n");
    printf("<20>退出。\n");
    printf("\n");

    scanf("%d",&m);
    printf("\n");

    switch(m)
    {
   
        case 1:
            {
   
                seqqueue q;
                q = creatqueue();
                initialqueue(q);
                goto loop;
            }
        case 2:
            {
   
                seqqueue q;
                q = creatqueue();
                queueempty(q);
                goto loop;
            }
        case 3:
            {
   
                seqqueue q;
                q = creatqueue();
                queuefull(q);
                goto loop;
            }
        case 4:
            {
   
                seqqueue q;
                int x;
                q = creatqueue();
                printf("输入入队元素。\n");
                scanf("%d",&x);
                enqueue(q,x);
                goto loop;
            }
        case 5:
            {
   
                seqcqueue q;
                char x;
                q = creatcqueue();
                printf("输入入队元素。\n");
                scanf("%s",&x);
                encqueue(q,x);
                goto loop;
            }
        case 6:
            {
   
                seqqueue q;
                q = creatqueue();
                outqueue(q);
                goto loop;
            }
        case 7:
            {
   
                seqqueue q;
                int x;
                q = creatqueue();
                queuefront(q,x);
                goto loop;
            }
        case 8:
            {
   
                seqqueue q;
                q = creatqueue();
                queueall(q);
                goto loop;
            }
        case 9:
            {
   
                seqqueue q;
                q = creatqueue();
                ssqueue(q);
                goto loop;
            }
        case 10:
            {
   
                linkqueue l;
                l = creatlqueue();
                initqueue(l);
                goto loop;
            }
        case 11:
            {
   
                linkqueue l;
                l = creatlqueue();
                queuelempty(l);
                goto loop;
            }
        case 12:
            {
   
                linkqueue l;
                l = creatlqueue();
                queuelfull(l);
                goto loop;
            }
        case 13:
            {
   
                linkqueue l;
                int x;
                l = creatlqueue();
                printf("输入入队元素。\n");
                scanf("%d",&x);
                enlqueue(l,x);
                goto loop;
            }
        case 14:
            {
   
                linkcqueue l;
                char x;
                l = creatclqueue();
                printf("输入入队元素。\n");
                getchar();
                scanf("%c",&x);
                enclqueue(l,x);
                goto loop;
            }
        case 15:
            {
   
                linkqueue l;
                l = creatlqueue();
                outlqueue(l);
                goto loop;
            }
        case 16:
            {
   
                linkqueue l;
                int x;
                l = creatlqueue();
                queuelfront(l,x);
                goto loop;
            }
        case 17:
            {
   
                linkqueue l;
                l = creatlqueue();
                queuelall(l);
                goto loop;
            }
        case 18:
            {
   
                linkqueue l;
                l = creatlqueue();
                sslqueue(l);
                goto loop;
            }
        case 19:
            {
   
                system("cls");
                goto loop;
            }
        case 20:
            {
   
                goto mmo;
            }
        default:
            {
   
                printf("输入错误。\n");
                system("pause");
                goto loop;
            }
    }
    mmo:system("cls");
}

void initialqueue(seqqueue q) //<1>初始化一个队列。
{
   
    q.lfront = 0;
    q.lrear = 0;
    printf("初始化完成。\n");
    system("pause");
}

int queueempty(seqqueue q) //<2>判断是否队空。
{
   
    if(q.lfront==q.lrear)
    {
   
        printf("队列为空。\n");
        system("pause");
        return 1;
    }
    else
    {
   
        printf("队列不为空。\n");
        system("pause");
        return 0;
    }
}

int queuefull(seqqueue q) //<3>判断是否队满。
{
   
    if(((q.lrear+1)%maxlen)==q.lfront)
    {
   
        printf("队列为满。\n");
        system("pause");
        return 1;
    }
    else
    {
   
        printf("队列未满。\n");
        system("pause");
        return 0;
    }
}

void enqueue(seqqueue q,int x) //<4>入队
{
   
    int i;
    if(((q.lrear+1)%maxlen)==q.lfront)
    {
   
        printf("队列已满。\n");
        system("pause");
    }
    else
    {
   
        q.lrear = ((q.lrear+1)%maxlen);
        q.data[q.lrear] = x;
        for(i=q.lfront+1;i<=q.lrear;i=i+1)
        {
   
            printf("%d\t",q.data[i]);
        }
        printf("\n");
        system("pause");
    }
}

void encqueue(seqcqueue q,char x) //<4>入队
{
   
    int i;
    if(((q.lrear+1)%maxlen)==q.lfront)
    {
   
        printf("队列已满。\n");
        system("pause");
    }
    else
    {
   
        q.lrear = ((q.lrear+1)%maxlen);
        q.data[q.lrear] = x;
        for(i=q.lfront+1;i<=q.lrear;i=i+1)
        {
   
            printf("%c\t",q.data[i]);
        }
        printf("\n");
        system("pause");
    }
}

void outqueue(seqqueue q) //<5>出队
{
   
    int i;
    if(((q.lrear+1)%maxlen)==q.lfront)
    {
   
        printf("队列为空。\n");
        system("pause");
    }
    else
    {
   
        q.lfront = (q.lfront+1)%maxlen;
        for(i=q.lfront+1;i<=q.lrear;i=i+1)
        {
   
            printf("%d\t",q.data[i]);
        }
        printf("\n");
        system("pause");
    }
}

void queuefront(seqqueue q,int x) //<6>取队头元素
{
   
    if(q.lfront==q.lrear)
    {
   
        printf("队列为空。\n");
        system("pause");
    }
    else
    {
   
        x = q.data[(q.lfront+1)%maxlen];
        printf("队头元素为:%d\n",x);
        system("pause");
    }
}

void queueall(seqqueue q) //<7>求当前队列中元素个数
{
   
    int i,x;
    x = q.lfront;

    for(i=0;x<q.lrear;x=x+1)
    {
   
        i = i+1;
    }

    printf("队列中的元素个数为:%d\n",i);
    system("pause");
}

void ssqueue(seqqueue q) //<8>编写算法实现
{
   
    int i=0,x,j,k;
    q.lfront = 0;
    q.lrear = 0;

    printf("向队列输入元素。(输入0后退出)\n");
    scanf("%d",&x);
    while(x!=0)
    {
   
        if(x%2==0)
        {
   
            if(i>0)
            {
   
                q.lfront = (q.lfront+1)%maxlen;
                i = i-1;
            }
            else
            {
   
                printf("当前队列为空。");
            }
        }
        else if(x%2!=0)
        {
   
            q.lrear = (q.lrear+1)%maxlen;
            q.data[q.lrear] = x;
            i = i+1;
        }

        k = q.lfront+1;
        for(j=0;j<i;j=j+1)
        {
   
            printf("%d\t",q.data[k]);
            k = k+1;
        }
        printf("\n\n");
        scanf("%d",&x);
    }
}

void initqueue(linkqueue q) //<1>初始化一个队列。
{
   
    node *p,*s;
    p = q.sfront->next;
    s = p->next;
    q.sfront->next = NULL;
    while(p!=q.srear)
    {
   
        free(p);
        p = s;
        s = s->next;
    }
    q.srear = q.sfront;
    printf("初始化完成。\n");
    system("pause");
}

int queuelempty(linkqueue q) //<2>判断是否队空。
{
   
    if(q.srear==q.sfront)
    {
   
        printf("队列为空。\n");
        system("pause");
        return 1;
    }
    else
    {
   
        printf("队列不为空。\n");
        system("pause");
        return 0;
    }
}

int queuelfull(linkqueue q) //<3>判断是否队满。
{
   
    int i=0;
    node *s;

    s = q.sfront->next;
    while(s!=NULL)
    {
   
        i = i+1;
        s = s->next;
    }

    if(i==100)
    {
   
        printf("队列已满。\n");
        system("pause");
        return 1;
    }
    else
    {
   
        printf("队列未满。\n");
        system("pause");
        return 0;
    }
}

void enlqueue(linkqueue q,int x) //<4>入队
{
   
    node *p;
    p = (node *)malloc(sizeof(node));

    p->data = x;
    p->next = NULL;
    q.srear->next = p;
    q.srear = p;

    p = q.sfront->next;
    while(p!=NULL)
    {
   
        printf("%d\t",p->data);
        p = p->next;
    }
    printf("\n");
    system("pause");
}

void enclqueue(linkcqueue q,char a)
{
   
    cnode *p,*u;

    p = (cnode *)malloc(sizeof(cnode));
    p->data = a;
    p->next = NULL;
    q.crear->next = p;
    q.crear = p;

    u = q.cfront->next;
    while(u!=NULL)
    {
   
        printf("%c",u->data);
        u = u->next;
    }
    printf("\n");
    system("pause");
}

void outlqueue(linkqueue q) //<5>出队
{
   
    node *u,*p;
    int x;
    if(q.srear==q.sfront)
    {
   
        printf("队列为空。\n");
        system("pause");
    }
    else
    {
   
        x = q.sfront->next->data;
        u 

到了这里,关于合肥工业大学 宣城校区 数据结构与算法实验 队列、二叉树、查找和排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 合肥工业大学嵌入式系统原理实验报告

    ✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 : 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少努力,

    2024年02月07日
    浏览(57)
  • 合肥工业大学机器人技术实验五十六题

    注:非原创,仅仅做了整理工作. //PlayerTeams.cpp130行到138行是PlayOn模式开球后拿球到决策 //把原来到soc注释,在后面添加代码;每次修改后构建之后才能看到效果 在 playOn 模式下,拿到球以后朝前方快速带球。 在 PlayOn 模式下,拿到球以后朝球门方向慢速带球。 在 playOn 模式下,拿到球

    2024年02月06日
    浏览(53)
  • 课程《FPGA技术及应用》作业分享(合肥工业大学仪器学院)

    合工大测控系教学 1. 简述EDA技术的发展进程。简要叙述什么是EDA技术。 EDA技术(Electronic Design Automation)是一种用于电子产品设计与制造的软件工具。 EDA技术的发展进程: 1960年代:开发出第一代EDA工具,用于电路设计与模拟。 1970年代:EDA工具发展到第二代,支持二维自动

    2024年02月03日
    浏览(64)
  • 合肥工业大学网络安全实验IP-Table

    ✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出

    2024年02月04日
    浏览(51)
  • 合肥工业大学机器人技术第四次作业:生成决策树

    样本数据 ID3生成决策树基本算法 计算数据整体的香农信息熵 对每个属性,分别计算条件熵 计算条件增益 选择最有条件增益作为决策树的根节点 重复上述步骤,直到信息熵降为0.达到根节点 使用sklearn生成ID3决策树 Python第三方库 sklearn 提供了决策树生成算法,此次作业便是用

    2024年02月06日
    浏览(53)
  • 合肥工业大学机器视觉期末复习 课件梳理(穿插作业中的伪代码)

    第一部分:低层次视觉 1、滤波器 2、梯度—边缘;梯度—能量(线裁剪) 3、模板匹配;二值图像分析 4、纹理 第二部分:中层次视觉 5、霍夫变换 6、分割 7、局部不变特征——检测、描述和匹配 8、立体 第三部分:高层次的视觉 9、实例识别 10、监督分类的对象检测 11、支持向

    2024年02月02日
    浏览(54)
  • 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释

    题目: 已知2个点的信息,定位自己的绝对坐标。   设图中C(0,0),P1(-52.5,-32), P2(-52.5, 32), P3(52.5,32), P4(52.5,-32), P5(0,-32), P6(0,32), P7(-30,-7), P8(-30, 7), P9(30,7), P10(30, -7),G1(-52.5,0),G2(52.5,0) 随机得到附近2点距离自己的信息(r,theta), r表示目标点距离自己的距离,theta表示以自己中心的极角.(

    2024年02月08日
    浏览(54)
  • 专业135总400+合工大合肥工业大学833信号分析与处理信息通信上岸经验分享

    专业135总400+合工大合肥工业大学833信号分析与处理信息通信上岸经验分享 基础课经验很多,大同小异,我分享一下自己的833专业课复习经验。 一:用到的书本 1.《信号与系统》(第三版)郑君里,高等教育出版社,2011 2.《数字信号处理》(第四版),高西全,西安电子科技

    2024年02月08日
    浏览(48)
  • 专业课145+合肥工业大学833信号分析与处理考研经验合工大电子信息通信

    今年专业课145+也是考研科目中最满意的一门,其他基本相对平平,所以这里我总结一下自己的专业课合肥工业大学833信号分析与处理的复习经验。 我所用的教材是郑君里的《信号与系统》(第三版)和高西全、丁玉美的《数字信号处理》(第四版),另外自己还看了祖师爷

    2024年01月18日
    浏览(62)
  • 专业140+总410+合工大合肥工业大学833信号分析与处理综合考研经验电子信息与通信工程,真题,大纲,参考书。

    一、专业课: 833信号分析与处理综合是两门,信号和数字信号处理,复习内容较多,大家专业课要早点开始,由于近年数学难度一再提高,专业课成了高分突破的法宝,我当时先准备报考中科大843也是信号和数字信号处理,一直跟Jenny老师的中科大843专业课辅导课,不熟悉

    2024年02月20日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包