C语言 数据结构
一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单。
C语言 数据结构
一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单。
#include
typedef int ElemType;
typedef struct lnode
{
ElemType data;
struct lnode *next;
}Lnode,*Linklist;
void CreateList(Linklist &L,int n)
{
L=new Lnode;
L->data=NULL;
L->next=NULL;
Linklist rear=L;//定义指向Lnode结构体指针rear,并指向L
cout<<"请输入"<
for (int i=0; i
{
Linklist s=new Lnode;
cin>>s->data;
rear->next=s;
rear=s;
}
rear->next=NULL;
}
void Insert(Linklist &L,int i, ElemType x)
{
Linklist p=L;
int j=0;
while (j
{
p=p->next;
j++;
}
if (!p) cout<<"位置不合理";//如果i-1已经超出链表的范围
else
{ Linklist s=new Lnode;
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Delete(Linklist &L,int i)
{ Linklist p=L;
int j=0;
while (j
{
p=p->next;
j++;
}
if (p||p->next!=NULL) //因为删除的是后面的元素,所以首先判断p不为空及不指向最后一个元素
{ Linklist q=new Lnode;
q=p->next->next;
p->next=q; //直接连上第i+1元素就ok
}
else cout<<"位置不合理";
}
int Find(Linklist &L,int i)
{
Linklist p=L;
int j=0;
while (p&&j
{
p=p->next;
j++;
}
if (!p) cout<<"Error";
else cout<<"存在你要找的值为"<
return p->data;
}
void Putout(Linklist &L)
{
Linklist p=L->next;
if(!p) cout<<"没有数据存入";
while(p!=NULL)
{
cout<data<<" ";
p=p->next;
}
cout<<'\n';
}
void main()
{
Linklist K;
int i,x,y;
cout<<"请输入您要存储的元素个数:"<<'\n';
cin>>i;
CreateList(K,i);
Putout(K);
while(1)
{ cout<<"请输入您要进行的操作1插入2删除3查找4退出"<<'\n';
cin>>i;
if(i==1)
{
cout<<"请输入你要插入的位置x和要插入的元素y:"<<'\n';
cin>>x>>y;
Insert(K,x,y);
Putout(K);
continue;
}
if(i==2)
{
cout<<"请输入你要删除的元素位置x:"<<'\n';
cin>>x;
Delete(K,x);
Putout(K);
continue;
}
if(i==3)
{cout<<"请输入你要查找的元素:"<<'\n';
cin>>x;
Find(K,x);
Putout(K);
continue;}
if(i==4) break;
else
{cout<<"你的输入有误"<<'\n';
continue;}
}
}