📄 单链表.cpp
字号:
#include<iostream.h>
#include<stdio.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList; //线性单链表的存储结构
int ListInsert_L(LinkList &L,int i,int e) //在带头结点的单链表L中第i个位置之前插入元素e
{LinkList p,s;
p=L; int j=0;
cout<<"请输入您想要插入的整数元素:";
cin>>e;
cout<<"请输入您想要插入的位置";
cin>>i;
while(p&&j<i-1){p=p->next;++j;} //寻找第i-1个结点
if(!p||j>i-1) //i小于1或者大于表长+1
{cout<<"插入的位置不合适,请重新输入";}
else
{s=(LinkList)new int(sizeof(LNode)); //生成新结点
s->data=e; s->next=p->next; //插入L中
p->next=s;
cout<<"经插入后现在链表中的元素为:";
for(p=L->next;p!=NULL;p=p->next)
cout<<p->data<<" ";}
cout<<endl<<endl<<endl;
return L,i,e;}
int ListLocate_L(LinkList L,int x) //在带头结点的单链表L中查找与x相等的所有元素的位序
{int i,count=0; LinkList p;
p=L->next; i=1; //i的初值为第一个元素的位序
//p的初值为第一个结点的位序
cout<<"请输入您想要查找的整数元素的值:"<<endl;
cin>>x;
while(p!=NULL&&p->data!=x) //寻找数据域的值为x的结点
{p=p->next; i++;}
if(!p){cout<<"Not Found!"<<endl;} //没有找到,显示NOT FOUND
else
{for(p;p!=NULL;p=p->next) //从找到的第一个满足要求的结点起,继续往后进行寻找满足要求的其他结点
if(p->data==x)
{cout<<"您要查找的元素存在!它在链表中的位置是:"<<i<<endl<<endl<<endl;i++;count++;}
else i++;
cout<<"您查找到的满足要求的元素一共有"<<count<<"个"<<endl<<endl<<endl;
}//所有与x相等的元素都已经找到,显示其所有结点所在的链表中的位置
return L,x;
}
int ListDelete_L(LinkList &L, int i, int &e) //在带头结点的单链表L中,删除第i个元素,并由e返回其值
{LinkList p,q; int j=0;
p=L;
cout<<"请输入您想要删除的元素的位置:";
cin>>i;
while(p->next&&j<i-1) //寻找第i个结点,并令p指向其前驱
{p=p->next; ++j;}
if(!(p->next)||j>i-1)
cout<<"您输入的位置有误,请重新输入"; //删除的位置不合理
else
{q=p->next; p->next=q->next; e=q->data; delete(q); //删除并释放结点
cout<<"删除已经完成!现在链表中的元素为:";
for(p=L->next;p!=NULL;p=p->next)
cout<<p->data<<" ";} //显示删除完毕后的单链表
cout<<endl<<endl<<endl;
return L,i,e;
}
main() //顺位序输入10个元素的值,建立带表头结点的单链线性表L
{
LinkList L;
LinkList p;
LinkList q;
int e,x;
L=(LinkList)new int(sizeof(LNode));
L->next=NULL; //先建立一个带头结点的单链表
q=L;
cout<<"请输入任意10个整数:"<<endl;
for(int i=0;i<10;i++)
{p=(LinkList)new int(sizeof(LNode)); //生成10个新结点
cin>>p->data; //输入元素的值
p->next=q->next; //插入结点
q->next=p;q=p;}
cout<<"单链表已经建立成功,现在表中的10个数据分别是:";
for(p=L->next;p!=NULL;p=p->next)
{cout<<p->data<<" ";} //输出建立成功后的单链表
cout<<endl;
while(L->next!=NULL) //L不为空时,可执行以下操作
{cout<<"请选择1、2、3、4四个数字选择您想要执行的操作:"<<endl<<"1、查找" <<endl<<"2、插入"<<endl<<"3、删除"<<endl<<"4、不需要再进行操作,退出程序"<<endl;
cout<<"请选择:";
int n; //根据选择,对单链表进行查找、插入和删除操作
cin>>n;
if(n==1)
ListLocate_L(L,x); //对单链表执行查找操作
if(n==2)
ListInsert_L(L,i,e); //对单链表执行插入操作
if(n==3)
ListDelete_L(L,i,e); //对单链表执行删除操作
if(n==4) //不对单链表执行任何操作
return 0; }
cout<<"该链表中的元素已经都被删除完,不再执行任何操作!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -