#include <stdio.h>
#include <stdlib.h> //提供malloc()原型
typedef struct LNode *List;
typedef int ElementType;
//定义数据结构的自定义名称
struct LNode{
ElementType Data; //数据域
List Next; //指针域
};
struct LNode L;
List PtrL;
int Length(List PtrL) //链表头指针
/*表长*/
{
List p = PtrL; //临时的指针 p 指向表的第一个节点
int j = 0; //计数器作用
while(p) //遍历单向链表
{
p = p->Next;
j++; //当前p指向的是第j个节点
}
return j;
}
List FindKth(int K,List PtrL)
/*查找-序号*/
{
List p = PtrL;
int i = 1;
while (p!= NULL && i < K)
{
p = p->Next;
i++;
}
if (i==K)
{
return p; //找到K位置,返回指针
}
else
{
return NULL; //未找到,返回空
}
}
List Find(ElementType X,List PtrL)
/*查找-值*/
{
List p = PtrL;
while (p != NULL && p->Data != X)
{
p = p->Next;
}
return p; //找到X,返回指针,未找到X,返回NULL
}
List Insert(ElementType X, int i, List PtrL)
/*插入*/
//步骤: 1、 构造一个新结点,用s指向
// 2、 找到链表的第i-1个结点,用p指向
// 3、 然后修改指针,插入结点
// s-Next指向 p->Next,p->Next指向s,
{
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); //查找第i-1个结点
if(p==NULL)
{
printf("参数%d错误",i);
return NULL; //i-1结点不存在
}
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)
/*删除*/
{
List p ,s;
if(i==1) //删除表的第一个节点
{
s = PtrL; //s指向第一个节点
if (PtrL != NULL)
{
PtrL = PtrL->Next; //从链表中删除
}
else
{
return NULL;
}
free(s); //释放s
return PtrL;
}
p = FindKth(i-1 , PtrL); //查找第i-1个结点
if (p == NULL)
{
printf("%d 节点不存在",i-1);
return NULL;
}
else if (p ->Next == NULL)
{
printf("%d 节点不存在",i);
return NULL;
}
else
{
s = p->Next; //s 指向第i个结点
p->Next = s->Next; //从链表中删除
free(s); //释放被删除的结点
return PtrL;
}
}
int main()
{
int j;
int i =1;
List p;
j=Length(PtrL); //计算长度
printf("当前长度:%d\n",j);
PtrL=Insert(5,1,PtrL); //在表头插入结点
p=FindKth(1,PtrL);
printf("查找头结点的值:%d\n",p->Data); //按照序号查找并打印结果
p=Find(5,PtrL);
printf("查找数值5:%d\n",p->Data); //按照值查找并打印结果
printf("插入数值3\n");
Insert(3,2,PtrL); //插入操作
p=Delete(1,PtrL);
printf("删除头结点后,当前头结点数值:%d\n",p->Data); //删除头结点
j=Length(&L); //计算长度
printf("当前长度:%d\n",j);
return 0;
}
线性表链式存储的实现
最新推荐文章于 2022-10-01 11:02:19 发布