数据结构中链表问题 大家帮忙看看这个程序哪里出问题了
输入各个命令以及相关数据,它们对应的格式如下:
在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表位置与插入的元素值
清除线性表:clear
获取某个位置的元素:getelem,接下来一行是需要获取的元素位置
删除某个位置的元素:delete,接下来一行是被删除的元素位置
修改某个位置的元素:update,接下来一行是被修改的元素位置及值
打印所有元素:getallelem
当输入的命令为exit时,程序结束
输出
当输入的命令为getelem时,请输出获取的元素值,
当输入的命令是delete时,请输出被删除的那个元素值
当输入的命令是getallelem时,请输出所有元素值
# include <iostream>
# include <string>
# include <stdlib.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}Node,*linklist;
int initelist (linklist &L)
{
L = new Node;
if (L == NULL)
return 0;
L->next = NULL;
return 1;
}
Node *findlinklist (linklist L,int i)//查找某个结点
{
int j = 0;
Node *p = L;
while (j<i && p!=NULL)
{
j++;
p = p->next;
}
if (j==i)
return p;
return NULL;
}
int insertlist (linklist &L,int i,int e)//插入一个新结点
{
Node *p,*q;
p=findlinklist ( L,i-1);
if (p == NULL)
return 0;
q=new node;
q->data = e;
q->next = p->next;
p->next = q;
return 1;
}
int deletelinklist (linklist &L,int i,int &e)//删除某个结点
{
Node *p,*q;
p = findlinklist (L,i-1);
if (p == NULL)
return 0;
q = p->next;
if (q = NULL)
return 1;
e = q->data;
p->next = q->next;
free (q);
return 1;
}
int clearlinklist (linklist &L)//清除链表
{
L->next = NULL;
return 1;
}
int getlinklist (linklist L,int i,int &e)//获取某个结点的值
{
Node *p;
p = findlinklist (L,i);
if (p == NULL)
return 0;
e = p->data;
return 1;
}
int updalinklist (linklist L,int i,int e)//更换某个结点的值
{
Node *p;
p = findlinklist (L,i);
if (p == NULL)
return 0;
p->data = e;
return 1;
}
void print(linklist L)//打印链表
{
Node *p = L->next;
while(p != NULL)
{cout<<L->data<<" ";
p = p->next;
}
cout<<endl;
}
int main ()
{
linklist L;
if (initelist(L) == 0)
return 0;
string s;
Node *p;
int n=0,m=0,q=0,e=0;
cout<<"请输入你要的操作"<<endl;
cin>>s;
while (s!="exit")
{
if (s == "insert")
{
cout<<"请输入你要插入的组数"<<endl;
cin>>n;
while (--n)
{
cout<<"请输入你要插入的位置和值分别用空格隔开,每行数据有两个值,分别代表位置与插入的元素值"<<endl;
cin>>m>>q;
insertlist (L,m,q);
cout<<"请继续输入要插入的位置与插入的元素值"<<endl;
}
}
else if (s == "clear")
{
clearlinklist (L);
}
else if (s == "getelem")
{
cout<<"请输入你要获取值的位置"<<endl;
cin>>m;
getlinklist (L,m,e);
cout<<e<<endl;
}
else if (s == "delete")
{
cout<<"请输入你要删除的位置"<<endl;
cin>>m;
deletelinklist (L,m,e);
cout<<e<<endl;
}
else if (s == "updae")
{
cout<<"请输入你要更换的位置及更换的值"<<endl;
cin>>m>>q;
updalinklist (L,m,q);
}
else if (s == "getallelem")
{
print (L);
}
cin>>s;
}
system ("pause");
return 0;
}
运行结果不对 大侠们帮忙看看了 先谢谢了