c语言-求大神帮助解释这段C语言代码

问题描述

求大神帮助解释这段C语言代码

*/
#include
#include
using namespace std;

//////////////////////////////
//
template class List;

/*结点*/
template
class Node
{

friend class List;
T value;
Node *next;
Node(int v,Node *n)
{
value=v,next=n;
}
};

///////////////////////////////
//
/*链表*/
template
class List
{
public:
List();
~List();
void showList();
void xunhuan();
void shanchu(Node *p);
void js(int n,int s,int m);
bool isEmpty()
{
return head==NULL;
};
void append(const T value);
private:
Node *head;
};

template
void List::showList()
{
Node *p=head;
while(p!=NULL)
{
cout<value<<' ';
p=p->next;
}
}

template
List::List()
{
head=NULL;
}

template
List::~List()
{}

template
void List::append(T v)
{
Node *e=new Node(v,NULL);
Node *p=head;
if(head==NULL)
{

head=e;

}
else
{
while(p->next!=NULL)
p=p->next;
p->next=e;
}
}

template
void List::xunhuan()
{
Node *p=head;
while(p->next!=NULL)
{
p=p->next;
}
p->next=head;

}

template
void List::shanchu(Node *p)
{
Node *h=p;

while(h->next!=p)
    h=h->next;
h->next=p->next;
delete p;

}

template
void List::js(int n,int s,int m)
{
Node *p=head;
Node *temp;
int i;

for(i=0;i<s-1;i++)
    p=p->next;

cout<<"出列顺序为:";
while(n!=1)
{  

    for(i=0;i<m-1;i++)
        p=p->next;

    cout<<p->value<<' ';
    temp=p;
    p=p->next;
    shanchu(temp);

    n--;
}

cout<<p->value;

}

////////////////////////////////////////
//
class Text
{
public:
void text()
{
/*
n为单链表的长度;
s为从开头第S个结点处开始报数
m为报数长度,报m的结点将被删除
*/
List list;
int i;
int n,s,m;

    cout<<"请输入n,s,m三个相关数据"<<endl;
    cin>>n>>s>>m;

    for(i=0;i<n;i++)
        list.append(i+1);

    list.showList();
    cout<<endl;

    list.xunhuan();

    list.js(n,s,m);
}

};
/////////////////////////////////////////////////////////////
//主函数
int main()
{
Text t;
t.text();
while(1){}
return 0;
}

解决方案

这不是C语言,是C++,用到了模板,定义了链表,夹杂着英文和拼音,你可以看出是干嘛的
比如 shanchu 删除
append 追加
等等

具体什么不懂,请贴出来。

解决方案二:

这是个循环链表的练习代码。

看下面这个就明白了。

小孩报数问题
有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,
该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,
直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序

解决方案三:

类似约瑟夫环,循环链表的应用。

时间: 2024-11-01 11:56:00

c语言-求大神帮助解释这段C语言代码的相关文章

求大神帮忙解释这段代码,他具体是来实现什么的

问题描述 求大神帮忙解释这段代码,他具体是来实现什么的 if(v == btPre){ btPre.setBackgroundColor(0xffc0c0c0); String s = tvLevel.getText().toString(); int level = Integer.parseInt(s); --level; level = (level-1+TetrisView.MAX_LEVEL) % TetrisView.MAX_LEVEL; ++level; s = String.va

r语言-求大神指点,怎样用R语言对同一文件夹里的很多Excel表,EXCEL表又有很多Sheet实现写入操作

问题描述 求大神指点,怎样用R语言对同一文件夹里的很多Excel表,EXCEL表又有很多Sheet实现写入操作 手都断了,试了好多函数,loadWorkbook,openxlsx同时用write.xlsx,addWorksheet--试了一下午,都被这问题搞死了,呜呜~这是出现过的一个错误 解决方案 http://blog.sina.com.cn/s/blog_6e9c33de0101a6ps.html 解决方案二: 可以先读取出来,操作完数据在进行写入啊

c语言-求大神帮帮看看这段代码那里出错了。谢谢

问题描述 求大神帮帮看看这段代码那里出错了.谢谢 刚刚学习,什么都不懂,今天第一次练手,却出现错误,我看了半小时楞是没看出来哪里出错了,求大家帮帮看看.谢谢了. 解决方案 要使用system()函数,就得加头文件,注意你源代码文件保存的后缀名为.c文件,main()函数下面的第一行有个分号 ; 解决方案二: 第一行system那行,最后加分号 解决方案三: [VB.NET]大家看看,这段代码出错了,要怎么改,谢谢,,在线等,当天结贴!!!!!! 解决方案四: system("color 5&qu

编程语言-我要用C++实现这段代码 求大神帮解释下R语言代码的意思

问题描述 我要用C++实现这段代码 求大神帮解释下R语言代码的意思 OrgData=read.csv("DownlinkPower_train.csv",header=T) TestData=read.csv("DownlinkPower_test.csv",header=T) #remove abnormal data, optional //移除异常数据 OrgData = subset(OrgData, OrgData[,1] > 0) TestData

c语言 c++-c语言求大神解答,一个数组的基础问题

问题描述 c语言求大神解答,一个数组的基础问题 数组的地址是什么?是不是就是数组名,也就是第一个元素的地址,也就是这个数组的首地址? 解决方案 数组名可以当成指向数组首元素的地址使用. 例如:int a[10]; 可以通过: cout<<*a<<endl; //来输出数组a中的第一个元素. cout<<*(a + i)<<endl; //来输出数组中的第i个元素. 下面两个输出的地址值也是相同的. printf("--->%pn",

java-问问大神们 我刚开始学面向对象 求大神帮忙解释一下

问题描述 问问大神们 我刚开始学面向对象 求大神帮忙解释一下 这是自己创建的一个类 然后有参无返回都运行成功了,就是有参数有返回值的那里出问题了 运行不了 按运行键后 控制台出的程序是别的 请问大神们这是什么原因?这是程序 求大神们帮帮忙 解决方案 输出了什么?是错误还是什么信息. 就你的程序没有问题. 解决方案二: 是不是你运行的就不是这个工程啊,你看看你选对当前工程了吗 解决方案三: 把输出的信息发出来下 解决方案四: 编译并运行的文件不对,你点击有参有反回值.java右键run试试. 解决

c++-关于C++字符串流程序在vc6和vs2005下运行不一致问题,求大神给解释!!!

问题描述 关于C++字符串流程序在vc6和vs2005下运行不一致问题,求大神给解释!!! string input; cin>>input; int len = 0; string strtmp; istringstream strstream(input); strstream>>len>>strtmp; 以上程序在vc6和vs2005运行不一致,不知道是小弟机器原因还是什么问题,很困惑,同样的程序怎么运行不一样呢, 难道是vc6编译器和vs2005编译器差别???

指针-C语言 求大神拯救

问题描述 C语言 求大神拯救 根据下列要求,完成程序 1从键盘输入一个三位数整数,并输出该整数,同时输出该三位整数的每一位数字 2写一个函数,判断该三位整数是否为水仙花数 3以该整数的三位数字作为一元二次方程的系数,求该一元二次方程的根 4定义该整形数组,包含十个数据,把该整数的三位数字.依次放入该数组的最前三位,并把数组内容补充完整.并对该数组进行排序,分别输出该数组排序前和排序后的顺序 5对4中做好的数组进行排序(算法不和4相同)输出.(限用指针实现) 解决方案 153 153, 1 5 3

急求-求大神教编程,用c语言,没什么基础

问题描述 求大神教编程,用c语言,没什么基础 有四个人夜间过一座独木桥,他们只有一只手电筒.而这座独木桥一次最多允许两人同时通过,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去.两人同行时以较慢者的速度为准,四人过桥时间分别是1分.2分.5分和10分.他们四人过完桥最少需要_____分钟. 解决方案 #includestruct person {char name[10];int ptime;};// 按过桥时间从小到大排序void Sort(struct person a[]int