求大神帮助解释这段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;
}

3个回答

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

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

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

看下面这个就明白了。

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐