链表
格式
链表最基本的格式如下:
struct Node
{
int data; //数据区
struct Node *next; //地址区
};
链表空间分为数据区和地址区,数据区用来存储数据,地址区存储的是下一块数据的地址;
链表的基本操作:
- 初始化
/*
函数功能:初始化链表表头
函数参数:表头地址
函数返回值:SUCCESS FAILURE
*/
int InitLink(pnode *h) //由于需要修改实参指针内容,所以函数参数需要双重指针
{
if (h == NULL)
{
printf("初始化失败\n");
}
*h = (node *)malloc(sizeof(node) * 1);
if (NULL == *h)
{
return FAILURE;
}
(*h)->next = NULL;
return SUCCESS;
}
- 插值
/*
函数功能:向链表插值
函数参数:表头 插入位置 查入元素
函数返回值:FAILURE SUCCESS
*/
int InsertLink(pnode h, int p, int e) //向链表插入数值,如果要插入的位置前面不存在,就插入失败
{
if (NULL == h)
{
return FAILURE;
}
pnode n = h;
int k = 1;
while(k < p && n)
{
n = n->next;
k++;
}
if (!n || p < k)
{
return FAILURE;
}
pnode m = (pnode)malloc(sizeof(node) * 1);
if (NULL == m)
{
return FAILURE;
}
m->data = e;
m->next = n->next;
n->next = m;
return SUCCESS;
}
- 确认链表是否为空
/*
函数功能:确认链表是否为空
函数参数:表头
函数返回值:FAILURE SUCCESS
*/
int LinkEmpty(pnode h)
{
if (NULL == h)
{
return FAILURE;
}
return (h->next == NULL) ? TURE : FALSE;
}
- 输出链表
/*
函数功能:输出链表
函数参数:表头
函数返回值:SUCCESS FAILURE
*/
int TraverseLink(pnode h)
{
if (NULL == h)
{
return FAILURE;
}
pnode n = h->next;
while(n)
{
printf("%d ", n->data);
n = n->next;
}
printf("\n");
return SUCCESS;
}
- 定位元素
/*
函数功能:定位元素
函数参数:表头 元素 元素位置
函数返回值:SUCCESS FAILURE
*/
int LocateElem(pnode h, int e, int *p)
{
if(NULL == h)
{
return FAILURE;
}
h = h->next;
while(h)
{
if (h->data == e)
{
return SUCCESS;
}
else
{
h = h->next;
(*p)++;
}
}
return FALSE;
}
- 或取元素位置
/*
函数功能:获取元素位置
函数参数:表头 元素位置
函数返回值:FAILURE SUCCESS 元素
*/
int GetElem(pnode h, int p)
{
if (NULL == h)
{
return FAILURE;
}
pnode n = h->next;
int i;
for (i = 0; i < p; i++)
{
n = n->next;
if (NULL == n)
{
return FALSE;
}
}
return n->data;
}