目录
前言:开始正式的数据结构复习,由于基础很差,所以就先从代码入手,我会更新每一部分的学习笔记。喜欢用代码注释,0基础小白专用
前言:开始正式的数据结构复习,由于基础很差,所以就先从代码入手,我会更新每一部分的学习笔记。喜欢用代码注释,0基础小白专用
链式存储实现
typedef struct LNode* List;
struct LNode
{
int data[1000];
List Next;//每个节点中的Next存放下个结点的地址(Next是地址变量)
};
助解
求表长
//求表长
int length(List Ptrl) {
List p = Ptrl;//让操作不干扰原结构体
int j = 0;
while (p)
{
p = p->Next;
j++;
}
return j;
}
查找
(1)按值查找
//(1)按值查找
List Find(int K, List Ptrl) {
List p = Ptrl;
while (p->data != K && p != NULL) {
p = p->Next;
}
return p;//如果是null则是未找到
}
(2)按序号查找
//(2)按序号查找
List FindKth(int k, List Ptrl) {
List p = Ptrl;
int i = 0;
while (i < k && p->Next != NULL) {
p = p->Next;
}
if (i == k) {
return p;
}
else {
return NULL;
}
}
插入操作实现
//插入操作实现
List Insert(int i,int k,List Ptrl) {
List p, s;
//插入第i位置,即i-1之后
//考虑插在表头的情况
if (i == 1) {
//创建节点
s = (List)malloc(sizeof(struct LNode));
//头节点的指针变量存储的下一个节点的地址
s->data = k;
s->Next = Ptrl;
return s;
}
//找到第i-1的节点
p = FindKth(i - 1, Ptrl);
if (p == NULL) {
printf("参数错误");
return NULL;
}else{
//创建节点
s = (List)malloc(sizeof(struct LNode));
//头节点的指针变量存储的下一个节点的地址
s->data = k;
s->Next = p->Next;
p->Next = s;
return Ptrl;
}
}
删除操作
//删除操作
List Delete(int i, List Ptrl) {
List s, p;
//假如删除头结点
if (i == 1) {
//判断头节点是否不存在 贸然将Ptrl=Ptrl->Next可能会报错
if (Ptrl!=NULL) {
s = Ptrl;
Ptrl = Ptrl->Next;
free(s);//释放s指向的头节点
}
else {
return NULL;
}
}
//找到i-1的结点
p = FindKth(i - 1, Ptrl);
//判断i-1和i结点是否存在
if (p == NULL) {
printf("第%d结点不存在!",i-1);
return NULL;
}
if (p->Next==NULL) {
printf("第%d结点不存在!", i);
return NULL;
}
s = p->Next;
p->Next = s->Next;
free(s);
return Ptrl;
}