我见到的那几个链表

我们都知道链表这个东东

链表的某一个节点,包含了数据和指向下一个节点的指针。

它有几个实现的方式,本文仅列出个人见过的几个链表的实现方式:

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、二维数组;

过于简单,不作说明;

(又是水分极高的一篇文章)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值