~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

基本结构:

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

 

posted on 2016-03-15 20:05  LuoTian  阅读(470)  评论(0编辑  收藏  举报