链表的初始化,插入,删除,查找
初始化链表
初始化单链表 InitList
void InitLinkList(LinkList& L)
{
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
}
在指定位置pos插入element
void InsertLinkList(LinkList& L, int pos, ElementType element)
{
LinkList p, s;
int j;
p = L;
for (j = 0; j < pos - 1; j++)
p = p->next;
if (!p->next || j > pos - 1)
printf("插入位置不合法\n");
s = (Node*)malloc(sizeof(Node));
s->data = element;
s->next = p->next;
p->next = s;
}
在指定的位置删除元素
在指定的位置pos插入元素element
void InsertLinkList(LinkList& L, int pos, ElementType element)
{
LinkList p, s;
int j;
p = L;
for (j = 0; j < pos - 1; j++)
p = p->next;
if (!p->next || j > pos - 1)
printf("插入位置不合法\n");
s = (Node*)malloc(sizeof(Node));
s->data = element;
s->next = p->next;
p->next = s;
}
查找元素
int LocateList(LinkList& L, ElementType element)
{
LinkList p;
int j = 1;
p = L->next;
while (p && p->data != element)
{
p = p->next; j++;
}
if (p) return j;
else return 0;
}
取值
ElementType GetLinkList(LinkList& L, int pos)
{
Node* p = L->next;
int i = 1;
while (p && i < pos)
{
p = p->next;
i++;
}
return p->data;
}
创建并打印链表元素
void CreateList(LinkList& L, int n)
{
InitLinkList(L);
LinkList p, r = L;
int i;
for (i = 0; i < 5; i++)
{
p = (Node*)malloc(sizeof(Node));
scanf_s("%c", &p->data);
p->next = NULL;
r->next = p;
r = p;
}
}
void PrintLinkList(LinkList& L)
{
Node* p = L->next;
if (!p)
{
printf("链表为空!");
}
while (p)
{
printf("%c\n", p->data);
p = p->next;
}
}
void main()
{
LinkList L;
ElementType element;
int pos;
//依次采用尾插法插入 a、b、c、d、e 元素;
CreateList(L, 5);
//输出链表元素;
PrintLinkList(L);
//取链表 L 的第 3 个元素
element = GetLinkList(L, 3);
printf("链表的第3个元素为%c\n", element);
//查找并输出元素 b 的位置
pos = LocateList(L, 'b');
printf("元素b在链表的第%d个位置\n", pos);
//在第 4 个元素位置上插入 f 元素;
InsertLinkList(L, 4, 'f');
printf("插入新元素后的链表元素:\n");
PrintLinkList(L);
//删除链表L的第2 个元素
DeleteLinkList(L, 2);
printf("删除后的链表元素:\n");
PrintLinkList(L);
}