DHU数据结构-循环单链表-ADT应用-圆桌问题
目录
1.题目
2.题解
3.代码实现
1.题目
圆桌问题
作者: 冯向阳 时间限制: 1S 章节: DS:数组和链表
问题描述 :
目的:使用C++模板设计循环链表的抽象数据类型(ADT)。并在此基础上,使用循环链表ADT的基本操作,设计并实现单链表的简单算法设计。
内容:(1)请使用模板设计循环链表的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考网盘中的单链表ADT原型文件,自行设计循环链表的ADT。)
(2)ADT的简单应用:使用该ADT设计并实现循环链表应用场合的一些简单算法设计。
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
输入说明 :
输入:好人和坏人的人数n(<=32767)、步长m(<=50);
输出说明 :
输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行。
输入范例 :
52 6
输出范例 :
BGGBGBGGBBBBGGGGBBBGBGGBGBBGGBBGBGBBGGGBBBGBGGBBGG
BBGBBGGGGBBBBGGBGGBBGBBGGBGBBGGBBBGGBGGBBGGGBBGBGG
GBGB
2.题解
- 挖坑
3.代码实现
- 1
#include <iostream> #include <vector> #include <cstring> #include <sstream>using namespace std;/* 循环单链表的结点定义*/ template<class ElemType> struct LinkNode {ElemType data;int num;int used;//0表示没用过;LinkNode<ElemType> *next;LinkNode(LinkNode<ElemType> *ptr = NULL){next = ptr;num=0;used=0;} //构造函数1,用于构造头结点LinkNode(const ElemType &item, int x=0,LinkNode<ElemType> *ptr = NULL) //构造函数2,用于构造其他结点//函数参数表中的形参允许有默认值,但是带默认值的参数需要放后面{next = ptr;data = item;num=x;used=0;}//int getNum(){ return number; } //取得结点的序号ElemType getData(){ return data; } //取得结点的数据域的值void SetLink( LinkNode<ElemType> *link ){ next = link; } //修改结点的next域void SetLink( ElemType value ){ data = value; } //修改结点的next域 };//带头结点的循环单链表 template<class ElemType> class CirLinkList{private:LinkNode<ElemType> *head; // 头结点LinkNode<ElemType> *tail; // 尾结点public://无参数的构造函数CirLinkList(){head = new LinkNode<ElemType>; tail = head; head->next = head;head->used=1;}//带参数的构造函数CirLinkList(const ElemType &item){head = new LinkNode<ElemType>(item); tail = head; head->next = head;}//拷贝构造函数CirLinkList(CirLinkList<ElemType> &List);//析构函数~CirLinkList(){ListDestroy();}//销毁链表void ListDestroy();//清空链表void ListClear();//返回链表的长度int ListLength() const;//判断链表是否为空表bool ListEmpty() const;//获取循环链表头结点LinkNode<ElemType>* GetHead() { return head;}//获取循环链表尾结点LinkNode<ElemType>* GetTail() { return tail;}//设置链表头结点void SetHead(LinkNode<ElemType> *p){ head = p;}//在链表的第pos个位置之后插入e元素bool ListInsert_next(int pos,ElemType e);//在首结点之前插入一个结点bool InsFirst( ElemType &e );//在尾结点之前插入一个结点void InsTail( ElemType &e ,int num);//表头插入法动态生成链表void CreateList_Head(vector<ElemType> &A);//表尾插入法动态生成链表void CreateList_Tail(vector<ElemType> &A);//遍历链表void ListTraverse() const; }; template<class T> void CirLinkList<T>::ListDestroy() {auto t=head;auto p=head;while(t!=p){delete head;t=t->next;}delete p; } template<class T> void CirLinkList<T>::ListTraverse()const {auto t=head->next;auto p=head;int cnt=0;while(t!=p){cnt++;if(t->used)cout<<"B";else cout<<"G";if(cnt>=50){cout<<endl;cnt=0;}t=t->next;}cout<<endl; } template<class T> void CirLinkList<T>::InsTail(T &e,int num) {auto s=new LinkNode<T>(e,num);s->next=head;tail->next=s;tail=s; } template<class T> void CirLinkList<T>::CreateList_Tail(vector<T> &A) {auto it=A.begin();for(it;it!=A.end();it++)InsTail(*it,(it-A.begin())+1); }template<class ElemType> void Joseph(CirLinkList<ElemType> &A, int m,int n) {auto t=A.GetHead();while(n){int cnt=0;while(cnt<m){t=t->next;if(t->used==0)cnt++;}t->used=1;n--;}A.ListTraverse();cout<<endl; } int main() {int n,m;vector<int> a;cin>>n;cin>>m;for(int i=1;i<=2*n;i++)a.push_back(i);CirLinkList<int> A;A.CreateList_Tail(a);Joseph(A,m,n);return 0; }
DHU数据结构-循环单链表-ADT应用-圆桌问题相关推荐
- 数据结构-循环单链表之魔术师发牌问题
问题描写叙述: 魔术师手中有A.2.3--J.Q.K十三张黑桃扑克牌.在表演魔术前,魔术师已经将他们依照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一開始,魔术师数1,然后把最上面的那张牌翻 ...
- 数据结构-循环单链表之约瑟夫问题
约瑟夫问题的由来: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...
- DHU数据结构-单链表-ADT应用-长整数加法运算(使用单链表存储计算结果)
目录 1.题目 2.题解 3.代码实现 1.题目 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使 ...
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
- 【数据结构】循环单链表的实现(C语言)
循环单链表应掌握以下基本操作: 1.建立一个空的循环单链表. 2.获得循环单链表的最后一个结点的位置. 3.输出循环单链表中各结点的值. 4.在循环单链表中查找值为x的结点. 5.在循环单链表中第i个 ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: 循环单链表的实现,和上一篇文章单链表的实现大致同样点击打开链接,略有差别: 1:循环推断的条件不再是s == NULL或者s->next == NU ...
- (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表
文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...
- 数据结构之python实现循环单链表实例
题目如下: python实现: import random class CLNode:def __init__(self,name):self.name = nameself.next = None ...
- 王道书 P41 T19(循环单链表实现)
/*** 用链表实现 王道P41 T19** ①算法思想:* 不断地从 L 中找到最小值输出并删除,* 直到 L -> NEXT = L 结束.** ②数据结构:* typedef struct ...
最新文章
- spring security源码分析之web包分析
- 汇总常用的jQuery操作Table tr td方法
- dreamweaver 8的替换功能
- hdu 2570 (贪心)
- windows 64位PHP5.5配置xhprof
- MYSQL索引和权限管理
- 《MATLAB智能算法超级学习手册》一一1.5 简单工程应用分析
- python———两个栈实现一个队列
- Ms08067年度技术文集合
- 虚拟机ip、主机ip、代理ip
- 学信网忘记原手机号码的解决办法
- 3行代码,搞定AI自动抠图
- 不要高估你和任何一个人的关系
- pyinstxtractor.py 的改进 - 反编译pyinstaller生成exe的工具
- 新闻发布系统——主页面分页
- 2020年中国经济蓝皮书(第四部分)
- 3dTile技术研究-概念详述(5)
- 2020笔记本选购推荐
- clusterProfiler安装
- 详解操作系统的运行机制
热门文章
- Guiding Teacher Forcing with Seer Forcing for Neural Machine Translation翻译
- 四则运算——单元测试(测试方法:Right-BICEP )
- [情侣空间] 基于spring boot的自制情侣空间
- 做软件测试有前途么?
- matlab英文文本信息量,实验一英文文本信息量的计算-Read.doc
- 认识计算机教案流程图,流程图教案信息技术.doc
- Android绘制优化(二)布局优化
- 在英文论文写作中,什么时候该用斜体?
- 使用AUI框架开发微信小程序
- Android手机安装原版BT5[ARM]