#include <iostream>
#include <iomanip>
#include<cstdlib>
#define maxsize 100
typedef int datatype;
using namespace std;
datatype x,i;
typedef struct seqnode
{
datatype data;
int size;
struct seqnode *next;
} seqnode,*seqlist;
seqlist l;
char menuselect(void)
{ char ch;
cout<<endl;
cout<<" *******************顺序线性表功能菜单*******************"<<endl;
cout<<" * a:建立线性表 b:输出表长 *"<<endl;
cout<<" * c: 插入元素 d:删除元素 *"<<endl;
cout<<" * k:查找 l: *"<<endl;
cout<<" * z:退出 *"<<endl;
cout<<" ********************************************************"<<endl;
cout<<" 请输入你的选择:";
cin>>ch;
return ch;
}
void seqinit(seqlist &l)
{
if((l=new seqnode)==NULL)
exit(-1);
l->next=NULL;
}
//求表长
int listlength(seqlist &l)
{
seqlist p;
int i;
i=0;
p=l;
while(p->next!=NULL)
{
i++;
p=p->next;
}
return i;
}
//创建表
int seqbulid(seqlist &l,datatype x)
{
seqlist q;
q=new seqnode;
q->data=x;
q->next=l->next;
l->next=q;
return 1;
}
//插入表(真实序号位置)
int seqinsert(seqlist &head,int i,datatype x)
{
seqlist p,q;
int j;
p=head;
q=new seqnode;
q->data=x;
for(j=0; j<i-1; j++)
{
p=p->next;
}
q->next=p->next;
p->next=q;
return 1;
}
//删除表(真实序号位置)
int seqdelete(seqlist &head,int i)
{
seqlist p,k;
int j;
p=head;
for(j=0; j<i-1; j++)
{
p=p->next;
}
k=p->next;
p->next=k->next;
free(k);
return 1;
}
//打印表
int seqprinter(seqlist &l)
{
seqlist p;
p=l;
while(p->next!=NULL)
{
p=p->next;
cout<<" "<<p->data;
}
return 1;
}
//查找元素
int seqlocate(seqlist &l,datatype x)
{
seqlist p,k,q;
int i;
i=0;
p=l->next;
while(p!=NULL)
{
i++;
if(p->data==x)
{
return i;
}
else
p=p->next;
}
if(!p)
return 0;
}
void mymenu(void)
{
char menuselect(void);
for(;;)
{
switch (menuselect())
{
case 'a':
cout<<" 创建顺序表,请输入数据元素:"<<endl;
cin>>x;
while(x!=-1)
{
seqbulid(l,x);
cin>>x;
}
seqprinter(l);
break;
case 'b':
cout<<" 所建立表的元素个数为:";
cout<<listlength(l);
break;
case 'c':
cout<<" 请输入要插入的数据元素:";
cin>>x;
cout<<" 请输入要插入的元素位置:";
cin>>i;
seqinsert(l,i,x);
seqprinter(l);
break;
case 'd':
cout<<" 请输入要删除的元素位置:";
cin>>i;
seqdelete(l,i);
seqprinter(l);
break;
case 'k':
int j;
cout<<" 请输入要查找的元素:";
cin>>x;
j=seqlocate(l,x);
if (j=0)
cout<<"没有找到该元素"<<endl;
else
cout<<"查到,位号为"<<seqlocate(l,x)<<"的元素"<<endl;
break;
case 'z':
cout<<"再见!"<<endl;
return;
}
}
}
int main()
{
void mymenu(void);
seqinit(l);
mymenu();
}
链表的操作
最新推荐文章于 2023-10-25 20:22:48 发布