此方法虽然简单,但是真写起来太复杂了。 

 /*线性表的链式存储*/ 

 #include<stdio.h> 

 #include<stdlib.h> 

 struct Lnode 

 { 

int a; 

Lnode *next; 

 }; 

 /*线性表的初始化*/ 

 void Init_L(Lnode *&L) 

 { 

L=(Lnode*)malloc(sizeof(Lnode)); 

L->a=0; 

L->next=NULL; 
  

 } 

 /*线性表的后插建立*/ 

 void Create_L1(Lnode *&L) 

 { 

int i,j; 

printf("输入线性表的个数\n");  

scanf("%d",&i); 

L->a=i; 

Lnode *Node,*N; 

N=L; 

for(j=1;j<=i;j++) 

{ 

Node=(Lnode*)malloc(sizeof(Lnode)); 

scanf("%d",&Node->a); 

N->next=Node; 

N=Node; 

} 

N->next=NULL; 

 } 

 /*线性表的后插建立*/ 

 void Create_L2(Lnode *&L) 

 { 

int i,j; 

printf("输入线性表的个数\n"); 

scanf("%d",&i); 

L->a=i; 

Lnode *Node=L; 

for(j=1;j<=i;j++) 

{ 

Node=(Lnode*)malloc(sizeof(Lnode)); 

scanf("%d",&Node->a); 

Node->next=L->next; 

L->next=Node; 

} 

 } 

 /*线性表的按序号查找*/ 

 int Get_L(Lnode *&L,int num) 

 { 

int i; 

Lnode *Node=L; 

if(num<1||num>L->a) 

return 0; 
  

for(i=1;i<=num;i++) 
  

Node=Node->next; 

return Node->a; 

 } 

 /*线性表的按序号删除*/ 

 int Delete_L1(Lnode *&L,int num) 

 { 

if(num<1||num>L->a) 

return 0; 

int i; 

Lnode *Node=L; 

for(i=1;i<=num-1;i++) 
  

Node=Node->next; 

Node->next=Node->next->next; 

--L->a; 

return 1; 

 } 

 /*线性表的按值删除*/ 

 void Delete_L2(Lnode *&L,int num) 

 { 

int i; 

Lnode *Node=L;  

for(i=1;i<=L->a-1;i++) 
  

if(Node->next->a==num) 

{ 

Node->next=Node->next->next; 

--L->a; 

} 
  

else 

Node=Node->next; 

 } 

 /*线性表的插入:按序号前插入*/ 

 void Insert_L(Lnode *&L,int num) 

 { 

int i; 
  

Lnode *Node=L,*N; 

for(i=1;i<=num-1;i++) 
  

Node=Node->next; 

N=(Lnode*)malloc(sizeof(Lnode)); 

scanf("%d",&N->a); 

N->next=Node->next; 

Node->next=N; 

++L->a; 

 } 

 /*线性表的查找*/ 

 int Locate_L(Lnode *&L,int num) 

 { 

int i; 

Lnode* Node=L; 

for(i=1;i<=L->a;i++) 

{ 

Node=Node->next; 

if(Node->a==num) 

return i; 

} 

 } 

 /*线性表的输出*/ 

 void Print_L(Lnode *&L) 

 { 

int i; 

Lnode *Node=L; 

for(i=1;i<=L->a;i++) 

{ 

Node=Node->next; 

printf("%d ",Node->a); 

} 

printf("\n"); 

 }  

 int main() 

 { 

Lnode *L; 

/*第一种实现 后插法*/ 

Init_L(L); 

Create_L1(L); 

Print_L(L); 

printf("%d\n",Get_L(L,3)); 

printf("%d\n",Locate_L(L,5)); 

Delete_L1(L,5); 

Print_L(L); 

Delete_L2(L,4); 

Print_L(L); 

Insert_L(L,4); 

Print_L(L); 

/*第二种实现 前插法*/ 

Init_L(L); 

Create_L2(L); 

Print_L(L); 

printf("%d\n",Get_L(L,3)); 

printf("%d\n",Locate_L(L,3)); 

Delete_L1(L,5); 

Delete_L2(L,5); 

Print_L(L); 

Insert_L(L,4); 

Print_L(L); 

return 0; 

 }