建立,输出,删除,求表长,查找,插入
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int Data;
struct node *Next;
}*List;
List read();//建立线性表
void print(List L);//输出
int length(List L);//求表长度
List FindKth(int k,List L);//按序号查找
List Find(int x,List L);//按值查找
List Insert(int x,int i,List L);//插入,查到第i个位置,也就是x就是第i个
List Delete(int i,List L);
int main()
{
List L;
L=read();
print(L);
int len=length(L);
cout<<"表长"<<len<<endl;
List p=FindKth(2,L);
cout<<"按顺序查找值"<<p->Data<<endl;
List p1=Find(11,L);
cout<<"按值查找值"<<p1->Data<<endl;
List p2=Insert(22,2,L);
print(p2);
List P3=Delete(3,L);
print(L);
return 0;
}
List read()
{
int N;
cin>>N;
List head,p;
p=(List)malloc(sizeof(node));
p->Next=NULL;
head=p;
if(N)
{
for(int i=0;i<N;i++)
{
List now=(List)malloc(sizeof(node));
now->Next=NULL;
cin>>now->Data;
p->Next=now;
p=now;
}
}
return head;
}
void print(List L)
{
List p=L->Next;
if(p)
{
while(p)
{
cout<<p->Data<<" ";
p=p->Next;
}
}
else
cout<<NULL<<endl;
cout<<endl;
}
int length(List L)
{
List p=L->Next;
int flag=0;
while(p)
{
p=p->Next;
flag++;
}
return flag;
}
List FindKth(int k,List L)
{
List p=L->Next;
int flag=1;
while(p&&flag<k)
{
p=p->Next;
flag++;
}
if(flag==k)
return p;
else
return NULL;
}
List Find(int x,List L)
{
List p=L->Next;
while(p&&p->Data!=x)
{
p=p->Next;
}
return p;
}
List Insert(int x,int i,List L)
{
List p,s;
if(i==1)//也就是在表头插入一个,但是我这个不行,因为我表头是NULL
{
List s=(List)malloc(sizeof(node));
s->Data=x;
s->Next=L;
return s;
}
p=FindKth(i-1,L);
if(p==NULL)
{
cout<<"参数i出错"<<endl;
return NULL;
}
else
{
s=(List)malloc(sizeof(node));
s->Data=x;
s->Next=p->Next;
p->Next=s;
return L;
}
}
List Delete(int i,List L)
{
List p,s;
if(i==1)
{
s=L->Next;
if(L)
L=L->Next;
else
return NULL;
free(s);
return L;
}
p=FindKth(i-1,L);
if(!p)
{
cout<<i-1<<"不存在"<<endl;
return NULL;
}
else if(p->Next==NULL)
{
cout<<i<<"不存在"<<endl;
}
else{
s=p->Next;
p->Next=s->Next;
free(s);
return L;
}
}