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;
}

浙公网安备 33010602011771号