zoukankan      html  css  js  c++  java
  • *单链表[带头结点]

    基本结构:

    typedef struct node
    {
        int data;
        struct node *next;
    }*List,Node;

    创建

    第一种:先初始化,再创建链表。在初始中,让头结点的next为NULL;

    void Init(List &L)
    {
        L=(List)malloc(sizeof(Node));
        if(!L)
            exit(-1);
        L->next=NULL;
    }

    第二种:不初始化,直接创建,又分为以下几种。
    <1>尾插法,假如创建n个结点。(从前往后建立结点,推荐!

    void creat(List &L,int n) /*尾插法*/
    {
        int e,i;
        List p,s;
        L=(List)malloc(sizeof(Node));
        p=L;
        for(i=0;i<n;i++)
        {
            s=(List)malloc(sizeof(Node));
            cin>>e;
            s->data=e;
            
            p->next=s;
            p=s;
        }
        p->next=NULL; /*尾部指向空*/
    }

    <2>头插法:不需要额外的指针、

    void creat(List &L,int n)/*头插法*/
    {
        int e,i;
        List s;
        L=(List)malloc(sizeof(Node));
        L->next=NULL;
        for(i=0;i<n;i++)
        {
            s=(List)malloc(sizeof(Node));
            cin>>e;
            s->data=e;
            
            s->next=L->next;
            L->next=s;
        }
    }

    插入和删除
    插入:在第i个位置处插入数据,游标p移到第i-1个位置(也即待删元素左边),这个位置是关键!

    int Insert(List &L,int i,int e) /*插入操作*/
    /* 1<=i<=L->Length */
    {
        int j=1;
        List p,s;
        p=L;/*指向第一个结点*/
        while(p && j<i) /*移到i-1的位置处*/
            {
                p=p->next;
                ++j;
            }
        if(!p || j>i) /*防止输入0或者大于结点的长度*/
            return ERROR;
            
        s=(List)malloc(sizeof(Node));
        s->data=e;
        
        s->next=p->next;
        p->next=s;
        return OK;
    }

    删除:借助两个游标p,q,移动之后,q指向第i-1个位置(也就是待删元素左边的位置),p指向待删元素,(这两个位置很重要!)

    int Delete(List &L,int i,int &e)
    /* 1<=i<=L->Length */
    {
        int j=1;
        List p,q;
        q=L;
        while(q->next && j<i)/*防止删除长度越界*/
        {
            q=q->next;
            ++j;
        }
        if(!(q->next) || j>i)
            return ERROR;
        
        p=q->next;
        e=p->data;
        
        q->next=p->next;
        free(p);
        return OK;
    }

    遍历

    void Traverse(List &L)
    {
        List p=L->next;
        while(p)
        {
            cout<<p->data;
            p=p->next;
        }
    }

    销毁

    依然是位置,q指向待销毁元素,p指向待销毁元素的下一个元素,即(p总提前于q)!

    int Delete(List &L)
    {
        List p,q;
        q=L->next;
        while(q)
        {
            p=q->next;
            free(q);
            q=p;
        }
        L->next=NULL;
        return OK;
    }
  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/tinaluo/p/5280920.html
Copyright © 2011-2022 走看看