• 单链表


    C++实现单链表的建立/测长/打印/删除/插入/排序/转置等操作

    #include <iostream>
    using namespace std;
    struct student
    {
        int data;
        student *next;
    }node;
    //(1)单链表的建立
    student *create()
    {
        //student node;
        student *head,*p,*s;
        int x;
        char c;
        head=new student;
        p=head;
        cout<<"please input the datas:"<<endl;
        while(cin>>x)
        {
            s=new student;
            s->data=x;
            //cout<<s->data<<endl;
            p->next=s;
            p=s;
            cin.get(c);
            if(c=='
    ') break;
        }
        p->next=NULL;
         head=head->next;//去掉哑节点
    
        return head;
    }
    //(2)链表的测长
    int length(student *node)
    {
        student *p=node;
        int n=0;
        while(p!=NULL)
        {
            n++;
            p=p->next;
        }
        return n;
    }
    //(3)链表的打印
    void print_list(student *node)
    {
        student *p=node;
        while(p!=NULL)
        {
            cout<<p->data<<endl;
            p=p->next;
        }
    }
    //(4)单链表删除节点
    student *del_node(student *head,int num)
    {
        student *p1,*p2;
        p1=head;
        while(num!=p1->data && p1->next!=NULL)
        {
            p2=p1;
            p1=p1->next;
        }
        if(num==p1->data)
        {
            if(p1==head)
            {
                head=p1->next;
                delete p1;
            }
            else
            {
                p2->next=p1->next;
                //delete p1;
            }
        }
        else
            cout<<"could not find number "<<num<<endl;
        return head;
    }
    //(5)单链表插入节点
    student *insert_node(student *head,int num)
    {
        student *p0,*p1,*p2;//p0是带插入节点
        p1=head;
        p0=new student;
        p0->data=num;
        while(p0->data>p1->data && p1->next!=NULL)
        {
            p2=p1;p1=p1->next;
        }
        if(p0->data<=p1->data)
        {
            if(p1==head)
            {
                p0->next=p1;
                head=p0;
            }
            else
            {
                p2->next=p0;
                p0->next=p1;
            }
        }
        else
        {
            p1->next=p0;
            p0->next=NULL;
    
        }
        return head;
    }
    //(6)实现单链表的排序
    student *sort_list(student *head)
    {
        int N=length(head);
        student *p1,*p2,*t;
        int temp;
        p1=head;
        for(int i=1;i<N;i++)
        {
            p2=p1->next;
            for(int j=i+1;j<=N;j++)
            {
                if(p1->data>p2->data)
                {
                    temp=p1->data;
                    p1->data=p2->data;
                    p2->data=temp;
    
                }
                p2=p2->next;
            }
            //if(i==1) head=p1;
            p1=p1->next;
        }
        return head;
    }
    //(7)实现单链表的转置
    
    student *reverse_list(student *head)
    {
        student *p1,*p2,*p3;
        p1=head;
        p2=p1->next;
        while(p2)
        {
            p3=p2->next;
            p2->next=p1;
            p1=p2;
            p2=p3;
        }
        head->next=NULL;
        head=p1;
        return head;
    }
    //(8)删除链表头结点
    student *remove_head(student *head)
    {
        student *p;
        p=head;
        head=p->next;
        delete p;
        return head;
    }
    int main()
    {
        student *p=create();
        int N=length(p);
        cout<<"length of list"<<N<<endl;
        cout<<"Print list"<<endl;
        print_list(p);
        //student *p2=del_node(p,3);
        //print_list(p2);
        //student *p3=insert_node(p2,2);
        //print_list(p3);
        //student *p4=sort_list(p);
        //print_list(p4);
        //student *p5=reverse_list(p);
        //print_list(p5);
        student *p6=remove_head(p);
        print_list(p6);
    
        return 0;
    }
  • 相关阅读:
    [Linux] Chmod 改变权限
    [linux命令]基本命令
    [Linux命令] 查看目录大小du
    [Linux命令]格式化mkfs
    在VMWare下的Linux切换
    .net的MSMQ异步调用
    CASSINI源代码分析
    [Wix] RadioButton与ListItem的属性要改掉了
    如何快速生成Insert数据插入语句?
    撕纸
  • 原文地址:https://www.cnblogs.com/riden/p/4564436.html
Copyright © 2020-2023  润新知