设为首页 加入收藏

TOP

关于约瑟夫循环使用单链表的问题(一)
2018-11-08 18:08:53 】 浏览:238
Tags:关于 约瑟夫 循环 使用 单链表 问题
#include <iostream>
//#include<malloc.h>      //分配长度为num_bytes字节的内存块,如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
                                      //当内存不再使用时,应使用free()函数将内存块释放。
using namespace std;
typedef struct Node
{
    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);      //剔除人员并输出最后剩余的一位人员
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;
}
void Remove(LinkList &head,int n,int m,int k)
{
  &nbs
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++雾中风景番外篇3:GDB与Valgri.. 下一篇顺序结构栈与队列之货物货架管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目