我们都知道链表这个东东
链表的某一个节点,包含了数据和指向下一个节点的指针。
它有几个实现的方式,本文仅列出个人见过的几个链表的实现方式:
1、类,指针
#include<bits/stdc++.h>
using namespace std;
class node{
public:
int data;
node *next;
};
class List {
public:
node n;
node *head;
List(int arr[],int n){
head= new node;
head->next=NULL;
node *last=head;
for (int i = 0; i < n; ++i) {
node*p= new node;
p->data=arr[i];
p->next=NULL;
last->next=p;
last=p;
}
last->next=NULL;
}
~List(){
node *temp=head;
while(head!=NULL){
head=head->next;
delete temp;
temp=head;
}
}
void print(){
node *temp=head;
while(temp->next!=NULL){
temp=temp->next;
cout<<temp->data<<" ";
}
cout<<endl;
}
void insert(int i,int x){
node *p=new node;
node *pre=new node;
pre=head;
p->data=x;
int c=i;
while (c--!=0){
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
}
};
int main()
{
int a[5]={1,2,3,4,5};
List l(a,5);
l.print();
l.insert(2,10);
l.print();
return 0;
}
2、数组,结构体
该方法也常用于表示节点与节点间的边;
#include<bits/stdc++.h>
using namespace std;
struct edge{
int t;
int next;
}e[100];
int head[100],cnt;
void add(int a,int b){
cnt++;
e[cnt].t=b;
e[cnt].next=head[a];
head[a]=cnt;
}
void show(int a){
cout<<a;
int i = head[a];
do{
printf("%d ",e[i].t);
i=head[e[i].t];
} while (i!=0);
}
int main()
{
int n,m,a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
add(a,b);
}
int s;//起点
cin>>s;
show(s);
return 0;
}
3、二维数组;
过于简单,不作说明;
(又是水分极高的一篇文章)