• c++链表


    (1)结构体定义节点

    用结构体存每个链表每个节点存的数据和指向的下一个节点的地址。

    struct Node
    {
        int data;
        Node *next;
    };

    (2)用结构体定义一个链表,存链表的头指针和长度。

    struct List
    {
        Node *head;
        int length;
    };

    (3)新增一个节点(尾插法),节点存的数据是dt

    void AddNode(List &list,int dt)
    {
        Node *pCurNode=new Node; //开辟一个Node类型数据的空间,将地址返回给pCurNode 
        pCurNode->data=dt;
        pCurNode->next=NULL;
        if(list.head==NULL)        //如果当前插入的是链表第一个节点
        {
            list.head=pCurNode;
            list.length=1;
        }else                              //尾插法
        {
            Node *pt=list.head;
            while(pt->next!=NULL)pt=pt->next; 
            pt->next=pCurNode;
            list.length++;
        }
    }

    (4)删除存的数据是num的节点

    void DeleteNode(List &list,int num)           
    {
        Node *pCurNode=list.head;
        Node *preNode=NULL;
        while(pCurNode!=NULL&&pCurNode->data!=num)
        {
            preNode=pCurNode;
            pCurNode=pCurNode->next;
        }
        if(pCurNode==NULL)
        {
            cout<<"Can't find"<<num<<"in the list"<<endl;
            return;
        }
        if(pCurNode==list.head) list.head=list.head->next;//如果删除的节点是第一个节点,改变链表头指针
        else preNode->next=pCurNode->next;
        list.length--;
        delete pCurNode;
    }

    (5)找到存的数据是num的节点

    Node *FindNode(const List &list,int num)
    {
        Node *pCurNode=list.head;
        while(pCurNode)
        {
            if(pCurNode->data==num)
            {
                cout<<"找到了"<<num<<".
    ";
                return pCurNode;
            }
            pCurNode=pCurNode->next;
        }
        cout<<"无法找到"<<num<<endl;
        return NULL;
    }

    (6)输出这个链表

    void Output(const List &list)
    {
        cout<<"链表:";
        Node *pCurNode=list.head;
        while(pCurNode!=NULL)
        {
            cout<<pCurNode->data;
            if(pCurNode->next) cout<<"->";
            pCurNode=pCurNode->next;
        }
        cout<<endl;
    }

    (7)完整代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    struct Node
    {
        int data;
        Node *next;
    };
    
    struct List
    {
        Node *head;
        int length;
    };
    
    void AddNode(List &list,int dt)
    {
        Node *pCurNode=new Node; //开辟一个Node类型数据的空间,将地址返回给pCurNode 
        pCurNode->data=dt;
        pCurNode->next=NULL;
        if(list.head==NULL)        //如果当前插入的是链表第一个节点
        {
            list.head=pCurNode;
            list.length=1;
        }else                              //尾插法
        {
            Node *pt=list.head;
            while(pt->next!=NULL)pt=pt->next; 
            pt->next=pCurNode;
            list.length++;
        }
    }
    
    void DeleteNode(List &list,int num)           
    {
        Node *pCurNode=list.head;
        Node *preNode=NULL;
        while(pCurNode!=NULL&&pCurNode->data!=num)
        {
            preNode=pCurNode;
            pCurNode=pCurNode->next;
        }
        if(pCurNode==NULL)
        {
            cout<<"Can't find"<<num<<"in the list"<<endl;
            return;
        }
        if(pCurNode==list.head) list.head=list.head->next;//如果删除的节点是第一个节点,改变链表头指针
        else preNode->next=pCurNode->next;
        list.length--;
        delete pCurNode;
    }
    
    Node *FindNode(const List &list,int num)
    {
        Node *pCurNode=list.head;
        while(pCurNode)
        {
            if(pCurNode->data==num)
            {
                cout<<"找到了"<<num<<".
    ";
                return pCurNode;
            }
            pCurNode=pCurNode->next;
        }
        cout<<"无法找到"<<num<<endl;
        return NULL;
    }
    
    void Output(const List &list)
    {
        cout<<"链表:";
        Node *pCurNode=list.head;
        while(pCurNode!=NULL)
        {
            cout<<pCurNode->data;
            if(pCurNode->next) cout<<"->";
            pCurNode=pCurNode->next;
        }
        cout<<endl;
    }
    
    int main()
    {
        List lst;
        lst.head=NULL;lst.length=0;
        int x=3;
        for(int i=1;i<=5;i++)
        {
            int a;
            cin>>a;
            AddNode(lst,a);
        }
        Node *c=FindNode(lst,2);
        cout<<c->data<<endl;
        Output(lst);
        DeleteNode(lst,3);
         Output(lst);
        return 0;
    }
  • 相关阅读:
    (转)Javascript如何正确使用getElementById,getElementsByName() and getElementsByTagName()
    把一个json字符串转换成对应的c#类型
    (转)C#数字转固定长度的字符串
    WDBuyNET.DMSFrame.DMSLinq内部方法
    (Transfered)DOM最常用的方法和属性(Javascript DOM编程艺术,DOM Scripting)
    三星颁布发表供应多款Android手机全新晋级
    APNIC执委赵巍:IPv4向IPv6过渡再无退路
    谷歌Android操纵市廛下架染辣手机软件
    盗窟手机小我私人撤军华强北:市场一年不如一年
    华为“黑室”命系商务部防线
  • 原文地址:https://www.cnblogs.com/zzyh/p/11908079.html
Copyright © 2020-2023  润新知