环境:dev c++
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode *List;
typedef int ElementType;
struct LNode{
ElementType Data;
List next;
};
int Length(List Ptrl);
List FindKth(int k,List Ptrl);
List Find(ElementType x,List Ptrl);
List Insert(ElementType x,int i,List Ptrl);
List Delete(int i,List Ptrl);
int Length(List Ptrl);
void print(List Ptrl);
int main(){
List p=NULL,s=NULL;
int i;
printf("length:%d\n",Length(p));
for(i=1;i<10;i++){
p=Insert(i,i,p);
}
printf("length:%d\n",Length(p));
print(p);
s=FindKth(3,p);
print(s);
p=Delete(5,p);
print(p);
return 0;
}
int Length(List Ptrl){//求表长
List p=Ptrl;
int j=0;
while(p){
p=p->next;
j++;
}
return j;
}
void print(List Ptrl){//输出链表数据
List p=Ptrl;
while(p){
printf("%d\t",p->Data);
p=p->next;
}
printf("\n");
}
List FindKth(int k,List Ptrl){//按序号查找
List p=Ptrl;
int i=1;
while(p!=NULL&&i<k){
p=p->next;
i++;
}
return p;
}
List Find(ElementType x,List Ptrl){//按值查找
List p=Ptrl;
while(p!=NULL&&p->Data!=x)
p=p->next;
return p;
}
List Insert(ElementType x,int i,List Ptrl){//在第i-1个结点后面插入一个值为x的结点
//*********************************************************
//*1、先构造一个新结点,用s指向
//*2、找到链表的第i-1个结点,用p指向
//*3、修改指针,插入结点
//*********************************************************
List p,s;
if(i==1){
s=(List)malloc(sizeof(struct LNode));
s->Data=x;
s->next=Ptrl;
return s;
}
p=FindKth(i-1,Ptrl);
if(p==NULL){
printf("Error:wrong paraments...\n");
return NULL;
}
else{
s=(List)malloc(sizeof(struct LNode));
s->Data=x;
s->next=p->next;
p->next=s;
return Ptrl;
}
}
List Delete(int i,List Ptrl){//删除链表的第i个位置上的结点
//********************************************************
//1、找到链表的第i-1个结点,用p指向
//2、用指针s指向要删除的结点,p的下一个结点
//3、修改指针,删除s所指向的结点
//4、释放s所指结点的空间
//********************************************************
List p,s;
if(i==1){
s=Ptrl;
if(Ptrl!=NULL)
Ptrl=Ptrl->next;
else
return NULL;
free(s);
return Ptrl;
}
p=FindKth(i-1,Ptrl);
if(p==NULL){
printf("第%d个结点不存在\n",i-1);
return NULL;
}
else if(p->next==NULL){
printf("第%d个结点不存在\n",i);
return NULL;
}
else{
s=p->next;
p->next=s->next;
free(s);
return Ptrl;
}
}
欢迎留言交流。。。