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

    结构:

    判空:(head->next==head)

    初始化:主要注意链表为空的条件,执行语句:L->next=L;

    void InitList(List &L)/*初始化空表*/
    {
        L=(List)malloc(sizeof(Node));/*生成头结点*/
        L->next=L;/*判空的条件*/
    }

    创建:借助一个游标p进行移动、

    void creat(List &head,int n)/*创建*/
    {
        int e;
        List p,s;
        p=head;
        while(n>0)
        {
            cin>>e;
            s=(List)malloc(sizeof(Node));
            s->data=e;
            p->next=s;
            s->next=head;
            p=s;
            --n;
        }
    }

    插入:在第i个位置处插入e,先把指针移到i-1处,然后进行操作。此外,p从头结点开始移动。

    void Insert(List &L,int i,int e)
    {
        List p,s;
        p=L;/*p等于头结点*/
        while(i-1>0)/*移动到第i个位置之前,需要移动i-1次*/
        {
            p=p->next;
            i--;
        }
        s=(List)malloc(sizeof(Node));
        s->data=e;
        
        s->next=p->next;
        p->next=s;
    }

    删除:将第i个元素删除。借助两个游标s,p,将p移动到i位置,s同步移动到i-1处,两者配合操作。p从头结点处开始,需要移动i次!

    void Delete(List &L,int i)
    {
        List s,p;
        p=L;
        while(i>0)
        {
            s=p;
            p=p->next;
            i--;
        }
        s->next=p->next;
        free(p);
    }

    完整代码:

    #include <iostream>
    using namespace std;
    typedef struct node
    {
        int data;
        struct node *next;
    }*List,Node;
    
    void InitList(List &L)/*初始化空表*/
    {
        L=(List)malloc(sizeof(Node));/*生成头结点*/
        L->next=L;/*判空的条件*/
    }
    void creat(List &head,int n)/*创建*/
    {
        int e;
        List p,s;
        p=head;
        while(n>0)
        {
            cin>>e;
            s=(List)malloc(sizeof(Node));
            s->data=e;
            p->next=s;
            s->next=head;
            p=s;
            --n;
        }
    }
    void Traverse(List &head)/*遍历*/
    {
        List p=head->next;
        while(p!=head)
        {
            cout<<p->data<<" ";
            p=p->next;
        };
    }
    void Destory(List &L)/*销毁*/
    {
        List p,q;
        p=L->next;
        while(p!=L)
        {
            q=p;
            p=p->next;
            free(q);
        }
        L->next=L;
    }
    int main()
    {
        List L;
        InitList(L);
        creat(L,3);
        print(L);
        destory(L);
        return 0;
    }
  • 相关阅读:
    LA 6439 Pasti Pas! Hash
    HDU 1067 Gap BFS+Hash
    POJ 3474 Gold Balanced Lineup Hash
    ZOJ 3802 Easy 2048 Again 状压DP
    Hihocoder #1044 状态压缩·一
    HDU 2522 & AOJ 441 & AOJ 364 关于小数和分数的转换
    HDU 2549 Sumset Hash+枚举
    POJ 1840 Eqs Hash + 中途相遇法
    HDU 2128 Tempter of the Bone II BFS
    POJ 3686 & 拆点&KM
  • 原文地址:https://www.cnblogs.com/tinaluo/p/5240727.html
Copyright © 2011-2022 走看看