#include <iostream>
//#include<malloc.h> //分配长度为num_bytes字节的内存块,如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
//当内存不再使用时,应使用free()函数将内存块释放。
using namespace std;
//#include<malloc.h> //分配长度为num_bytes字节的内存块,如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
//当内存不再使用时,应使用free()函数将内存块释放。
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}ListNode,*LinkList;
{
int data;
struct Node *next;
}ListNode,*LinkList;
/*
LinkList L;
L=malloc(sizeof(LinkList));
是指申请一个链表的头结点的空间,并使该链表的指针指向该结点。
因为理论上说链表空间可以无限,即整个内存的空间都可以为其所用,
所以无需提前指定链表空间大小也可以继续申请下一个结点的空间。
ListNode*p;
p=malloc(sizeof(LNode));
与上句不同,这句是指你申请一个结点的空间。LNode*p;是先定义一个结点。
p=malloc(sizeof(LNode));是指为该结点申请内存空间.
*/
// 注意一个结点和一个链表的区别就可以了。
LinkList Found(int n); //建立一个n个人员的单链表
void Remove(LinkList &head,int n,int m,int k); //剔除人员并输出最后剩余的一位人员
L=malloc(sizeof(LinkList));
是指申请一个链表的头结点的空间,并使该链表的指针指向该结点。
因为理论上说链表空间可以无限,即整个内存的空间都可以为其所用,
所以无需提前指定链表空间大小也可以继续申请下一个结点的空间。
ListNode*p;
p=malloc(sizeof(LNode));
与上句不同,这句是指你申请一个结点的空间。LNode*p;是先定义一个结点。
p=malloc(sizeof(LNode));是指为该结点申请内存空间.
*/
// 注意一个结点和一个链表的区别就可以了。
LinkList Found(int n); //建立一个n个人员的单链表
void Remove(LinkList &head,int n,int m,int k); //剔除人员并输出最后剩余的一位人员
int main()
{
int n = 0 , m = 0 , k = 0;
cout << "请输入人员个数n=";
cin>>n;
cout<<"请输入剔除一人的间距m=";
cin>>m;
cout<<"请输入剔除开始从第k为人,k=";
cin>>k;
LinkList head=NULL; //创建头指针为head的链表(是链表不是结点)
head=Found(n); //调用函数生成单链表
/*
for(int i=0;i<n;i++)
{
cout<<head->data<<endl;
head=head->next;
}
*/ //测试链表head是否建立
Remove(head,n,m,k); //调用函数剔除人员并输出最后剩余的一位人员
return 0;
}
LinkList Found(int n)
{
LinkList head=NULL; //头指针,也可以代表整个单链表
LinkList s,r;
for(int i=0;i<n;i++)
{
//s=(LinkList)malloc(sizeof(ListNode)); 使用malloc函数创建对象ListNode(结点)指针
s=new ListNode; //c++使用new来创建空间并赋值指针s
if(head==NULL)
head=s;
else
r->next=s;
r=s;
r->data=i+1;
}
r->next=head; //单链表循环
return head;
{
int n = 0 , m = 0 , k = 0;
cout << "请输入人员个数n=";
cin>>n;
cout<<"请输入剔除一人的间距m=";
cin>>m;
cout<<"请输入剔除开始从第k为人,k=";
cin>>k;
LinkList head=NULL; //创建头指针为head的链表(是链表不是结点)
head=Found(n); //调用函数生成单链表
/*
for(int i=0;i<n;i++)
{
cout<<head->data<<endl;
head=head->next;
}
*/ //测试链表head是否建立
Remove(head,n,m,k); //调用函数剔除人员并输出最后剩余的一位人员
return 0;
}
LinkList Found(int n)
{
LinkList head=NULL; //头指针,也可以代表整个单链表
LinkList s,r;
for(int i=0;i<n;i++)
{
//s=(LinkList)malloc(sizeof(ListNode)); 使用malloc函数创建对象ListNode(结点)指针
s=new ListNode; //c++使用new来创建空间并赋值指针s
if(head==NULL)
head=s;
else
r->next=s;
r=s;
r->data=i+1;
}
r->next=head; //单链表循环
return head;
}
void Remove(LinkList &head,int n,int m,int k)
{
&nbs
void Remove(LinkList &head,int n,int m,int k)
{
&nbs