针对数据结构02线性表在头歌平台练习过程中的完成代码,关卡数目较多,每题思路单独在每一关中解释。如有其他需求请留言。

第一关

可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中。 由于集合中的元素没有先后顺序,因此,插入位置可以自由选择。对于顺序表而言,在表尾位置插入不需要移动元素,是最高效的。

int ListLength(SqList L) //返回L的长度
{//代码开始return L.length;//代码结束
}void GetElem(SqList L, int i, int &e) //用e返回L中第i个元素(1<=i<=L.length)的值
{//代码开始e = L.elem[i - 1];//代码结束
}bool LocateElem(SqList L, int e) //判断L中有没有值为e元素,如果有,返回true,否则,返回false
{//代码开始for(int i = 0;i <L.length; i++){if(L.elem[i] == e)    return 1;}return 0;//代码结束
}void ListInsert(SqList &L,int e) //在L的最后插入值为e的元素
{//代码开始L.elem[L.length++] = e;//代码结束
}

第二关

求解集合A和B的并集,可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中。 由于集合中的元素没有先后顺序,因此,插入位置可以自由选择。对于单链表而言,在表头位置插入新结点,时间复杂度为O(1),是最高效的。

bool LocateElem(LinkList L, int e) //判断L中有没有值为e元素,如果有,返回true,否则,返回false
{//代码开始LinkList q = L->next;while(q != NULL){if(q->data == e)    return 1;q = q->next;}return 0;//代码结束
}void ListInsert(LinkList &L, int e) //在L的开头插入值为e的元素
{//代码开始LinkList q = new LNode;q -> data = e;q -> next = L -> next;L -> next = q;//代码结束
}

第三关

一元多项式可以抽象成一个线性表,线性表中的数据元素包含两个数据项,分别表示多项式每项的系数和指数。一元多项式的相加运算就可以抽象成将两个线性表A,B中指数相同的数据元素进行相加的问题。

此处数据范围较小,直接判断A中的每一项在B中是否存在,存在加到A的指数相同的项,在B中将该节点删除,若相加为0则同样在A中将该节点删除,最后将B中剩余的项按大小插入到A中。

void AddPolyn(Polynomial &Pa, Polynomial &Pb)
{//代码开始Polynomial a = Pa;while(a -> next != NULL){Polynomial b = Pb;while(b ->next != NULL){if(b -> next -> expn == a -> next -> expn){a -> next -> coef += b -> next -> coef;b -> next = b -> next -> next;}else{b = b -> next;}}if(a -> next -> coef == 0){a -> next = a -> next -> next;}else{a = a -> next;}}Polynomial b = Pb -> next;while(b != NULL){Polynomial a = Pa;while(a -> next != NULL){if(b -> expn < a -> next -> expn){Polynomial s = (Polynomial)malloc(sizeof(PNode));s = b;s ->next = a->next;a->next = s;break;}a = a -> next;}b = b -> next;}//代码结束 } //AddPolyn

第四关

如果不考虑遍历的次数,可以先遍历一次单链表求出其长度n,再遍历一次单链表求出第n-k+1个结点,该结点就是倒数第k个结点。但是,本关任务要求通过一次遍历就找出倒数第k个位置上的结点。

对于该题采用双指针的办法,先构造出大小为k的窗口,然后快慢指针一起移动,当快指针移动到尾节点时候,慢指针恰好移动到倒数第k位

int Search_K(LinkList L,int k)
{if(k<=0 || L==NULL)return 0;//查找失败返回0 //代码开始LinkList a = L->next;LinkList b = L->next;int cnt = 0;while(cnt < k){b = b->next;cnt++;}while(b != NULL){a = a->next;b = b->next;}cout << a -> data;return 1;//代码结束
}

第五关

对顺序表的基本操作,不在解释,有什么疑问可留言。


#include <iostream>
#include <string>
#include <string.h>
using namespace std;//定义结构体最大存书数量
#define MAXSIZE 1000//定义图书类型
typedef struct BOOK
{//代码开始string id;string name;int price;//代码结束
}Book;//定义图书顺序表类型
typedef struct
{//代码开始Book data[MAXSIZE];int m;//代码结束
}BookList;//初始化
void InitBookList(BookList &L) //构造一个空的顺序表L
{//代码开始L.m = 0;return ;//代码结束
}//增加一条图书记录
bool ListInput(BookList &L,string ISBN,string BookName,int Price) //数据输入
{//代码开始L.data[L.m].id = ISBN;L.data[L.m].name = BookName;L.data[L.m++].price = Price;return true;//代码结束
}//删除第i条图书记录
bool ListDelete(BookList &L,int i)
{//代码开始if(i < 1 || i > L.m)    return false;for(int j = i - 1; j < L.m ; j++){L.data[j] = L.data[j + 1];}L.m--;//代码结束
}//修改第i条图书记录并输出该条记录
bool ListUpdate(BookList &L,int i,string ISBN,string BookName,int Price)
{//代码开始if(i < 1 || i > L.m)    return false;L.data[i - 1].id = ISBN;L.data[i - 1].name = BookName;L.data[i - 1].price = Price;return true;//代码结束
}//查询特定图书名的图书记录并输出该条记录
bool ListSearch(BookList L,string BookName)
{//代码开始for(int i = 0; i < L.m ;i++){if(L.data[i].name == BookName){cout << L.data[i].id << ' ' << L.data[i].name << ' ' << L.data[i].price << endl;}}return true;//代码结束
}//查询当前图书列表的数量
int ListLength(BookList L)
{//代码开始return L.m;//代码结束
}//输出当前图书表记录
void ListOutput(BookList L)
{//代码开始for(int i = 0; i < L.m ; i++ ){cout << L.data[i].id << ' ' << L.data[i].name << ' ' << L.data[i].price << endl;}//代码结束
}//主函数,实现对图书表的增删查改
int main() {string ISBN;string BookName;int Price; //声明并初始化BookList LA;InitBookList(LA);//增加图书信息while(1){cin>>ISBN>>BookName>>Price;if(ISBN=="-1"&&BookName=="-1"&&Price==-1){break;}else{ListInput(LA,ISBN,BookName,Price);}}//输出当前图书列表cout<<"当前图书列表"<<endl;ListOutput(LA);cout<<endl;//修改第3条图书信息cout<<"修改第3条记录"<<endl;ListUpdate(LA,3,"ISBN","BookName",100);//输出当前图书列表ListOutput(LA);cout<<endl;//删除第3条图书信息cout<<"删除第3条记录"<<endl;ListDelete(LA,3);//输出当前图书列表ListOutput(LA);cout<<endl;//查询图书列表总数cout<<"当前共有记录:"<<ListLength(LA)<<endl;//查询特定图书名的图书记录并输出该条记录cout<<"查询输出图书名是《DataStructure》的记录:"<<endl;ListSearch(LA,"DataStructure"); return 0;
}

头歌实践教学平台数据结构与算法:02线性表相关推荐

  1. 头歌实践教学平台数据结构与算法:02线性表——反转链表(拓展)

    针对数据结构02线性表--反转链表(拓展)在头歌平台练习过程中的完成代码,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 已知一个带头结点的单链表L,将L反转并返回反转后的单链表.要求将L的 ...

  2. 头歌实践教学平台数据结构与算法链式线性表——课上练

    针对数据结构链式表在头歌平台练习过程中的完成代码,仅仅为作者一次通过(可能并未按照题目要求时间复杂度或空间复杂度),仍有较大优化空间,如有其他需求可留言. #include <stdio.h&g ...

  3. 头歌实践教学平台 MIPS CPU设计(HUST)

    实验简介 本实训项目将帮助学生掌握 CPU 控制器设计的基本原理,能利用硬布线控制器的设计原理在 Logisim 平台中设计实现支持五条指令的 MIPS 单周期 CPU,该处理器能运行简单的内存冒泡排 ...

  4. 头歌实践教学平台上如何建项目且通过git上传

    头歌实践教学平台上如何建项目且通过git上传 目标:在头歌上建立项目test,并通过git工具将文件上传至头歌中. (1) 首先在https://code.educoder.net/explore页面 ...

  5. 头歌实践教学平台-Linux网络实战(一)-DNS配置(Ubuntu系统)——保姆级教程

    头歌实践教学平台-Linux网络实战(一)-DNS配置(Ubuntu系统) ***写在前面*** 知识补充 相关知识 实验环境准备 安装DNS服务器并开启服务 一.标题配置域名和IP的正解与反解zon ...

  6. 头歌实践教学平台答案(Java实训作业答案)

    搜集整理了一份最新最全的头歌(EduCoder)Java实训作业答案,分享给大家.(EduCoder)是信息技术类实践教学平台.(EduCoder)涵盖了计算机.大数据.云计算.人工智能.软件工程.物 ...

  7. 头歌实践教学平台——计算机数据表示实验(HUST)

    当你看到到这篇文章的时候,想必你已经被计算机组成原理实验折磨的不成样子了,没错我也是,经过我这几天的努力终于将这些实验一一完成. 我将源码放在压缩包里了,大家只需要复制代码,放进头歌里,满分过! 点击 ...

  8. 头歌实践教学平台软件工程答案

    目录 面向数据流的设计方法-2 第1关:将数据流图转换为模块结构图-认识StarUML中的相关元素 相关知识 闯关要求 第2关:将数据流图转换为模块结构图-画出主模块 闯关要求 第3关:将数据流图转换 ...

  9. 头歌实践教学平台——python程序设计——元组的使用

    本关的编程任务是补全src/Step1/menu_test.py文件的代码内容,实现如下功能: 将输入的菜单menu_list转换为元组类型: 打印输出生成的元组: 打印输出元组中首字母最大的元素. ...

最新文章

  1. 使用XML模板在excel进行配置
  2. escape()、encodeURI()、encodeURIComponent() difference
  3. xp,win7,win2003,win2008常用命令集
  4. unity中脚本编辑器UnIDE
  5. 前端学习(3121):组件和模块
  6. [转]ClassPath是什么
  7. Transport level information does not match with SOAP Message namespace URI错误的理解
  8. 专业破解各种版本的IDEA
  9. 4键电子手表说明书_4键sport电子表使用说明书,按START键可循环选择12/24小时显示格式...
  10. 集团税务共享化、数字化系统如何选型(一)
  11. 精伦iDR210读卡器驱动安装教程
  12. 左右滑动日历(微信小程序)
  13. BlenderGIS 使用总结
  14. UniPro签约中国集成电路设计领域“IC独角兽”,助力研发管理
  15. java tika pdf_TIKA提取PDF
  16. 大数据、人工智能,未来已来
  17. 阿里开发的这个网站,让我写文章效率提高50%
  18. linux的软件漏洞,Linux man 软件包漏洞
  19. 数据治理【数据质量管理】
  20. 自动化测试之Windows计划定时任务命令schtasks及语法

热门文章

  1. apache反向代理,web,tomcat集群,weblogic集群
  2. Do not use “// @ts-ignore“ because it alters compilation errors问题的处理
  3. QMT量化交易软件使用攻略(四)-策略回测
  4. 年会抽奖活动-随机抽
  5. 响应式web设计-第一章 HTML5、CSS3及响应式设计入门
  6. Package org.eclipse.aether.metadata
  7. 【U8】固定资产结账提示“在对应所需名称或序数的集合中,未找到项目”
  8. Spring Boot: Spring Boot 整合 RabbitMQ
  9. 配置ROS中的TF变换关系
  10. Razor视图引擎、控制器与路由机制学习