zoukankan      html  css  js  c++  java
  • C++单链表2

    LinkList:

    #include<iostream>
    using namespace std;
    typedef int elemType;
    
    typedef struct Node
    {
        elemType data;
        Node *next;
    }*LinkList;
    
    bool InitList(LinkList *L)//初始化
    {
        *L = new Node;
        if(!L)
            return false;
        (*L)->next = NULL;
        return true;
    }
    
    bool IsEmpty(LinkList L)
    {
        if(L->next==NULL)
            return false;
        else
            return true;
    }
    
    bool ClearList(LinkList *L)
    {
        cout<<"Clear List."<<endl;
        LinkList p,q;
        p = (*L)->next;
        if(!p)
            return true;
        while(p)
        {
            q = p->next;
            delete p;
            p=q;
        }
        (*L)->next = NULL;
        return true;
    }
    
    int LengthList(LinkList *L)
    {
        //cout<<"The length of list is:";
        LinkList p;
        p = (*L)->next;
        int i=0;
        while(p)
        {
            p=p->next;
            i++;
        }
        return i;
    }
    
    bool GetElem(LinkList *L, int pos, elemType *pd)
    {
        cout<<"Get the "<< pos <<"th item:";
        LinkList p;
        p = (*L)->next;
        int i=1;
        while(p && i<pos)
        {
            p = p->next;
            i++;
        }
        if(!p || i>pos)
            return false;
        *pd = p->data;
        return true;
    }
    
    //在L中第pos个结点位置之前插入新数据元素x
    bool InsertList(LinkList *L, int pos, elemType x)
    {
        LinkList p,q;
        int i=1;
        p = *L;
        while(p && i<pos)
        {
            p = p->next;
            i++;
        }
        if(!p || i>pos)
            return false;
        q = new Node;
        q->data = x;
        q->next = p->next;
        p->next = q;
        return true;
    }
    
    bool DeleteList(LinkList *L, int pos, elemType *y)
    {
        int i =1;
        LinkList p,q;
        p = *L;
        while(p->next && i<pos)
        {
            p = p->next;
            i++;
        }
        if(!(p->next) || i>pos)
            return false;
        q = p->next;
        *y = q->data;
        p->next = q->next;
        delete q;
        return true;
    }
    
    int Locate(LinkList *L,elemType z)
    {
        int i=1;
        LinkList p;
        p = (*L)->next;
        while(p && p->data!= z)
        {
            p = p->next;
            i++;
        }
        if(!p)
            return 0;
        return i;
    }
    
    void PrintList(LinkList *L)
    {
        LinkList p;
        p = (*L)->next;
        int i=1;
        while(p)
        {
            cout << i << ":	"<< p->data <<endl;
            p = p->next;
            i++;
        }
    }
    
    LinkList *Reverse(LinkList *L)//反转单链表
    {
        cout<<"Reverse List:"<<endl;
        LinkList p,q,s;
        if((*L)->next->next==NULL || (*L)->next==NULL)
            return L;
        p = (*L)->next;
        q = p->next;
        (*L)->next->next = NULL;
        while(q)
        {
            s = q->next;
            q->next = p;
            p = q;
            q = s;
        }
        (*L)->next = p;
        return L;
    }
    
    int main()
    {
        LinkList L;
        InitList(&L);
        for(int i=1;i<7;i++)
            InsertList(&L,i,i);
        PrintList(&L);
        cout<<endl;
    
        int x = Locate(&L,2);
        cout<<"the location of 2 is: "<< x << endl;
        cout<<endl;
    
        cout<<"after delete the 6th item:"<<endl;
        int num;
        DeleteList(&L,6,&num);
        PrintList(&L);
        cout<<endl;
    
        Reverse(&L);
        PrintList(&L);
        cout<<endl;
    
        return 0;
    }
  • 相关阅读:
    MUSIC分辨率与克拉美罗下界的关系
    EXCEL 基本函数
    新手如何正确的开始练车
    5.20考试整理
    树上倍增 x
    逆元 x
    BSGS ! x
    【テンプレート】LCA
    [HDOJ5783]Divide the Sequence(贪心)
    [HDOJ5791]Two(DP)
  • 原文地址:https://www.cnblogs.com/jx-yangbo/p/4856793.html
Copyright © 2011-2022 走看看