zoukankan      html  css  js  c++  java
  • 单链表的实现

    描述

    定义单链表类,创建带头结点的单链表(节点类型为整型数据),要求包含以下成员函数:
    头插法创建单链表(利用构造函数实现)
    尾插法创建单链表(重载构造函数实现)
    链表的遍历
    按值删除一个节点
    按位置删除一个节点
    链表的析构

    输入输入一组数据,以尾插法的形式创建单链表(0表示输入结束)(构造第一个链表)
    输入一组数据,以头插法的形式创建单链表(0表示输入结束)(构造第二个链表)
    输入要删除元素的值(在尾插法创建的链表中进行改操作)
    输入要删除元素的位置(在尾插法创建的链表中进行改操作)输出输出尾插法创建链表的结果
    输出头插法插法创建链表的结果
    输出按值删除之后链表中剩余的元素(若删除的元素不存在,输出Error)
    输出按位置删除之后链表中剩余的元素(若删除的元素不存在,输出Error样例输入

    1 2 3 4 5 0 
    1 2 3 4 5 0
    2
    0

    样例输出

    1 2 3 4 5
    5 4 3 2 1
    1 3 4 5
    Error
    代码:注意输出结果的格式
    #include<cstdio>
    using namespace std;
    struct Node
    {
        int data;
        Node *next;
    };
    class Linklist
    {
    public:
        Linklist();///构造函数,通过头插法实现
        Linklist(int a[],int n);///重载函数,通过尾插法实现
        void print();
        int delete_x(int x);///按值删除
        int delete_i(int i);///按位置删除
        ~Linklist();
    private:
        Node*first;
    };
    Linklist::Linklist()///头插法
    {
        int x=0;
        first=new Node;first->next=NULL;
        Node *s;
        while(scanf("%d",&x))
        {
            if(x==0) break;
            s=new Node;
            s->data=x;
            s->next=first->next;
            first->next=s;
        }
    }
    Linklist::Linklist(int a[],int n)///尾插法
    {
        first=new Node;first->next=NULL;
        Node*s,*p;
        p=first;
        for(int i=1;i<=n;i++)
        {
            s=new Node;
            s->data=a[i];
            p->next=s;
            p=s;
        }
        p->next=NULL;
    }
    void Linklist::print()///遍历
    {
        Node* p;
        p=first->next;
        while(p)
        {
            if(p->next==NULL)
               printf("%d
    ",p->data);
            else
               printf("%d ",p->data);
            p=p->next;
        }
    }
    int Linklist::delete_x(int x)
    {
        Node *p,*q;
        p=first;
        while(p->next)
        {
            if((p->next)->data==x)
            {
                q=p->next;
                p->next=q->next;
                delete q;
                return 1;
            }
            p=p->next;
        }
        return 0;
    }
    int Linklist::delete_i(int i)
    {
        Node *p,*q;int j=0;
        p=first;
        while(j<i&&p->next)
        {
            if(j==i-1)
            {
                q=p->next;
                p->next=q->next;
                delete q;
                return 1;
            }
            j++;
        }
        return  0;
    }
    Linklist::~Linklist()
    {
        Node *p;
        while(first)
        {
            p=first->next;
            delete first;
            first=p;
        }
    }
    int main()
    {
       int a[10000],num=0,x;
       while(scanf("%d",&x))
       {
           if(x==0) break;
           a[++num]=x;
       }
       Linklist wei(a,num);
       Linklist tou;
       wei.print();
       tou.print();
    
       int temp1,temp2;
       scanf("%d%d",&temp1,&temp2);
       if(wei.delete_x(temp1))
       {
           wei.print();
       }
       else
       {
           printf("Error
    ");
       }
    
       if(wei.delete_i(temp2))
       {
           wei.print();
       }
       else
       {
           printf("Error
    ");
       }
    
       return 0;
    
    }
  • 相关阅读:
    div定位
    学习进度条(第十周)
    学习进度条(第九周)
    软件工程个人作业--找水王
    个人NABCD
    梦断代码阅读笔记01---死定了
    进度条(第八周)
    学习进度条(第七周)
    软件工程结对开发作业02---二维数组求最大连通子数组
    软件工程结对作业01--四则运算Web版
  • 原文地址:https://www.cnblogs.com/dean-SunPeishuai/p/10542979.html
Copyright © 2011-2022 走看看