#include <stddef.h>
#define ElementType int //自定义元素类型
//定义链表存储实现的线性表的结构体
typedef struct LNode* List;
struct LNode
{
ElementType Data;
List Next;
};
struct LNode Lnode;
List PtrL;
//求表长
int Length(List PtrL)
{
List p = PtrL;
int cnt = 0;
while (p) //节点不空就循环
{
p = p->Next;
cnt++;
}
return cnt;
}
//查找(按序号)
List FindKth(List PtrL, int k)
{
List p = PtrL;
int i = 1;
while (p != NULL && i < k)
{
p = p->Next;
i++;
}
if (i == k)
return p;
else
return NULL;
}
//查找(按值查找)
List FindX(List PtrL, ElementType X)
{
List p = PtrL;
while (p && p->Data != X)
{
p = p->Next;
}
return p;
}
//插入(在第 i - 1 个节点后插入)
List Insert(List PtrL, ElementType X, int i)
{
List p, s;
if (i == 1)
{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->Next = PtrL;
return s;
}
p = FindKth(PtrL, i - 1);
if (p == NULL)
{
printf("Error Augment");
return NULL;
}
else
{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s -> Next = p->Next;
p->Next = s;
return PtrL;
}
}
//删除
List Delete(List PtrL, int i)
{
List p, tmp;
if (i == 1)
{
tmp = PtrL;
if (PtrL != NULL)
PtrL = PtrL->Next;
else
return NULL;
free(tmp);
return PtrL;
}
p = FindKth(PtrL, i - 1);
if (p == NULL)
{
printf("The (i-1)th node is not existed!");
return NULL;
}
else if (p->Next == NULL)
{
printf("The ith node is not existed!");
return NULL;
}
else
{
tmp = p->Next;
p->Next = tmp->Next;
free(tmp);
return PtrL;
}
}
线性表的链式存储实现
最新推荐文章于 2023-05-08 17:20:57 发布