#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;
}
用类的形式建立链表
最新推荐文章于 2024-04-20 01:52:05 发布