摘要:本文主要向大家介绍了C/C++知识点之C语言实现线性表(链式存储方式),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言实现线性表(链式存储方式),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
#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;
}
本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号