C++创建查找插入删除单链表的操作求高手

1 创建单链表,写入元素:10 20 25 30 35(可以用P29页头插法或尾插法实现)
2.将元素输出显示在窗口上(参考求表长的函数)
3.查找操作:查找元素40,30,并告诉用户该元素是否存在
查找第3个元素
4.插入操作:往单链表中插入新元素,使得输出显示结果为:10 20 25 100 30 35
5.删除操作。在上面的基础上,删除30,输出结果是:10 20 25 100 35

#include <iostream>
using namespace std;
typedef int  ElemType;
typedef int Status;
#define OK 1
#define ERROR 0
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
void Creat_List(LinkList L)//创建单链表并输入元素
{
LinkList p;
ElemType ch;
cout<<"请输入链表元素,并且以输入-1表示结束!"<<endl;
while(cin>>ch&&ch!=-1)
{
p=(LinkList)malloc(sizeof(Lnode));
if(!p)
{
cout<<"获取内存失败"<<endl;
exit(ERROR);
}
p->data=ch;//尾插法
L->next=p;
L=p;
}
L->next=NULL;
}
Status output_List(LinkList L)//遍历单链表(输出单链表元素)
{
LinkList p;
p=L->next;
if(p==NULL)
{
cout<<"该链表是空链表!"<<endl;
exit(ERROR);
}
while(p!=NULL)
{
cout<<p->data<<"   ";
p=p->next;
}
cout<<endl;
return OK;
}
Status delete_List(LinkList L,ElemType k)
{
int count=0;
LinkList q;
if(L->next==NULL)
{
cout<<"该链表为空"<<endl;
exit(ERROR);
}
while(L->next!=NULL)
{
if(L->next->data==k)
{
q=L->next;
L->next=q->next;
free(q);
continue;//如果只需删除一个那么就把 continue 换成return OK; 即输入的元素有相同时是不是把多个都删除
}
L=L->next;
}
return OK;
}
void List_Inster(LinkList L,int i,ElemType e)//在指定位置插入元素
{
LinkList s;
int j=0;
while(L!=NULL&&j<i-1)
{
L=L->next;
j++;
}
if(!L||j>i-1)
{
cout<<"插入位置非法!"<<endl;
exit(ERROR);
}
s=(LinkList)malloc(sizeof(Lnode));
s->data=e;
s->next=L->next;
L->next=s;
}
Status seek(LinkList L,ElemType e1,ElemType e2,int i)
{
int k=0;
bool temp1=true,temp2=true,temp3=true;
LinkList p;
p=L->next;
if(p==NULL)
{
cout<<"该链表是空链表!"<<endl;
exit(ERROR);
}
while(p!=NULL)
{
k++;
if(p->data==e1)
{
temp1=false;
cout<<"元素"<<e1<<"在链表中!"<<endl;
}
if(p->data==e2)
{
temp2=false;
cout<<"元素"<<e2<<"在链表中!"<<endl;
}
if(k==i)
{
cout<<"第"<<k<<"个元素在链表中!其值为"<<p->data<<endl;
temp3=false;
}
p=p->next;
}
if(temp1)
          cout<<"元素"<<e1<<"在链表中!"<<endl;
if(temp2)
          cout<<"元素"<<e2<<"在链表中!"<<endl;
if(temp3)
       cout<<"第"<<k<<"个元素不在链表中!"<<endl;
return OK;
}
Status main()
{
ElemType e1,e2,e;
int n;
LinkList H;
H=(LinkList)malloc(sizeof(Lnode));
H->next=NULL;
    Creat_List(H);
cout<<"单链表中的元素为:"<<endl;
output_List(H);
cout<<"请输入要查找的2个元素e1,e2和查找的第几个元素n"<<endl;
    cin>>e1>>e2>>n;
seek(H,e1,e2,n);
cout<<"请输入插入的位置和元素!"<<endl;
ElemType m;
cin>>n>>m;
List_Inster(H,n,m);
cout<<"插入后的链表元素为:"<<endl;
    output_List(H);
cout<<"请输入要删除的元素!"<<endl;
cin>>e;
delete_List(H,e);
    cout<<"删除元素后的链表为:"<<endl;
output_List(H);
return 0;
}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答