#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
DataType data; // 值域
struct Node *next; // 指针域
} *PNode, *LinkList;
// 1.创建空链表
LinkList creatNullList_link() // 创建空链表
{
LinkList llist;
llist = (LinkList)malloc(sizeof(struct Node)); // 创建头结点
if (llist == NULL)
{
printf("内存分配失败!");
return 0;
}
llist->next = NULL;
return llist; // 函数值返回
}
// 2.判断链表空吗
int isNullList_link(LinkList llist)
{
return (llist->next == NULL);
}
// 3.求第一个值为x的结点的存储位置
PNode locate_link(LinkList llist, DataType x)
{
PNode p;
p = llist->next;
while (p != NULL && p->data != x)
{
p = p->next;
}
return p;
}
// 4.在p所指节点后面插入一个值为x的新结点
int insertPost_link(LinkList llist, PNode p, DataType x)
{
PNode q = (PNode)malloc(sizeof(struct Node));
if (q == NULL)
{
printf("Out of space!\n");
return 0;
}
else
{
q->data = x;
q->next = p->next; // 注意顺序
p->next = q;
return 1;
}
}
// 5.在p所指节点前面插入一个值为x的新结点
int insertPre_link(LinkList llist, PNode p, DataType x)
{
// 1. 检查插入位置是否合法
if (llist == NULL || p == NULL)
{
return 0;
}
PNode s = llist;
while (s->next != NULL && s->next != p)
{
s = s->next;
}
if (s->next != p)
{
return 0;
}
PNode q = (PNode)malloc(sizeof(struct Node));
if (q == NULL)
{
printf("Out of space!\n");
return 0;
}
else
{
q->data = x;
q->next = s->next;
s->next = q;
}
return 1;
}
// 6.在链表中查找值为x的结点并删除
int deleteV_link(LinkList llist, DataType x)
{
PNode q, p = llist;
while (p->next != NULL && p->next->data != x)
p = p->next;
if (p->next == NULL)
{
printf("Not exist!");
return 0;
}
else
{
q = p->next;
p->next = q->next;
free(q);
return 1;
}
}
// 7.删除指针p指向的结点
int deleteP_link(LinkList llist, PNode p)
{
PNode q = llist;
while (q->next != NULL && q->next != p)
q = q->next;
if (q->next == NULL)
{
printf("Not exist!");
return 0;
}
else
{
q->next = p->next;
free(p);
return 1;
}
}