P505 链表

 

 

数组 vs 链表

数组定义简单,以连续的变量形式储存,不可以减少或添加任何变量,因此在定义时必须已知长度,可能造成数组不够长或内存浪费的情况;
链表以结构体的自引用为原理,可以在内存中以不连续的方式储存,并动态分配内存,即随时加入或删除一个变量。但链表定义比较复杂,且除头结点外每一个结点都没有名字,引用起来比较辛苦。
如果是已知所需变量数,还是数组方便些。

 

 

 

 

 

//单链表入门练习

#include<bits/stdc++.h>
using namespace std;
struct Node{
    int No;string Na;
    Node *nxt;
}*H,*p,*pre;
int main(){
    H=pre=new Node;  cin>>H->No>>H->Na;
    for(int i=2;i<=11;i++){
        p=new Node; cin>>p->No>>p->Na;
        pre->nxt=p; pre=p;
    }
    p->nxt=NULL;
     
    puts("List1:");
    for(p=H;p!=NULL;p=p->nxt)cout<<p->No<<" "<<p->Na<<endl;
    puts("");
     
     
    //puts("【插入 在i前插入k】");
    //puts("请输入:i k");
     
    //puts("【删除 删除k】");
    //puts("请输入:k");
     
    return 0;
}
/*
1000 薛零
1001 刘一
1002 陈二
1003 张三
1004 李四
1005 王五
1006 赵六
1007 孙七
1008 周八
1009 吴九
1010 郑十
*/

  

   

 

 

// 约瑟夫问题链表版

#include <iostream>
#include <windows.h>
using namespace std;
struct Person{
    int num;
    Person *next;
};

int main(){
    int i,n,m;
    Person *head,*p,*pre;
    head=pre=new Person;
    head->num=1;
    
    cin>>n>>m;
    for(i=2;i<=n;i++){
        p=new Person;
        pre->next=p;
        p->num=i;
        pre=p;
    }
    p->next=head;
    
    pre=new Person;
    pre->next=head;
    while(head){
        p=pre;
        for(i=0;i<m;i++){
            pre=p;
            p=p->next;
        }
        cout<<p->num<<"  ";
        Sleep(600);
        if(p!=p->next) pre->next=p->next;
        else head=NULL;  
        delete p;
    }
    cout<<endl;
    
    
    return 0;
}

  

posted @ 2016-09-09 11:56  codeisking  阅读(454)  评论(0)    收藏  举报