用类的形式建立链表

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n;
struct node
{
    int data;
    struct node *next;
};
class ls
{
private:
    node *head;
public:
    ls(){head = NULL;}
    node * inisert(int key,int m);
    void Mydelete(int key);
    node *creat(int *a);
    void show();
};
node *ls::creat(int *a)//创建链表;
{
    int i;
    head = new node;
    head -> next = NULL;
    node *tail;//游动指针;
    tail = head;
    for(i = 0;i < n;i++)//顺序建立链表
    {
        node *p;
        p = new node;
        p -> data = a[i];
        p -> next = NULL;
        tail -> next = p;
        tail = p;
    }
    return head;
}
node *ls:: inisert(int key,int m)//插入元素;
{
    int i = 1;
    node *p;
    p = head -> next;
    while(p!=NULL)
    {
        if(i == m || m > n)
        {
            node *q;
            q = (node *)new (node);
            q -> data = key;
            q -> next = p -> next;
            p -> next = q;
            break;
        }
        else
        {
            i++;
            p = p -> next;
        }
    }
    return head;
}
void ls::Mydelete(int key)//删除元素;
{
    node *p;
    p = head;
    node *q = p -> next;
    while(q)
    {
        if(q -> data == key)
        {
            p -> next = q -> next;
            delete q;
            break;
        }
        p = q;
        q = q -> next;
    }
    if(p==NULL)//若链表中不存在这个元素值,输出;
    {
        cout<<"no "<<key<<" int the list!!"<<endl;
    }
}
void ls::show()//输出整个链表;
{
    node *tail = head -> next;
    while(tail != NULL)
    {
        if(tail -> next == NULL)//若是最后一个元素则换行,否则两元素之间隔一个空格;
            cout<<tail->data<<endl;
        else cout<<tail->data<<" ";
        tail = tail -> next;
    }
}
int main()
{
    ls head;
    int a[100010],i,m,key,k;
    cout<<"请输入要建立链表的数据总数"<<endl;
    cin>>n;
    cout<<"请输入"<<n<<"个数据:"<<endl;
    for(i = 0;i < n;i++)
    {
        cin>>a[i];
    }
    head.creat(a);
    cout<<"请输入要插入的节点值和位置:"<<endl;
    cin>>key>>m;
    head.inisert(key,m);
    cout<<"请输入要删除的节点值"<<endl;
    cin>>k;
    head.Mydelete(k);
    cout<<"链表为:"<<endl;
    head.show();
    return 0;
}

这里写图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值