您的位置:首页 > 理论基础 > 数据结构算法

【嵌入式Linux C编程】数据结构之链表

2018-03-26 21:25 369 查看
链接表是线性表的链接储存形式。线性表的储存空间是有限的,而链表的储存空间是无限的。
表中每个元素由节点Node构成,每个节点中分为一个数据区域,如 int data ,和一个指针区域  struct struct_name *next。
一条链表的第一个节点为头结点,一般不存放数据,当做头指针使用,指向下一个用来存放数据的节点。
链表的定义typedef char ListData;

typedef struct node { //链表结点
ListData data; //结点数据域
struct node * link; //结点链域
} ListNode;

typedef ListNode * LinkList;

LinkList first; 链表插入节点int InsertLink(Node *l, int p, DataType e)
{
Node *q = l;
int j = 1;

if (NULL == l) //入参判断
{
return FAILURE;
}

if (p > LengthLink(l) + 1) //2、判断插入位置
{
return FAILURE;
}

while (j < p) //移动指针到要插入位置的前一个
{
q = q->next;
j++;
}

if (j > p) //判断位置是否合法(如果q为空或者p=0,退出)
{
return FAILURE;
}

Node *n = (Node *)malloc(sizeof(Node)); //给结点分配空间
if (NULL == n)
{
return FAILURE;
}

n->data = e;
n->next = q->next;
q->next = n;

return SUCCESS;
}删除节点int DeleteLink(Node *l, int p)
{
DataType e;
Node *q = l;
int j = 1;

if (NULL == l)
{
return FAILURE;
}

if (p > LengthLink(l)) //8、判断删除位置
{
return FAILURE;
}

while (j < p) //移动指针到要插入位置的前一个
{
q = q->next;
j++;
}

if (j > p) //判断位置是否合法(如果q为空或者p=0,退出)
{
return FAILURE;
}

Node *n = q->next;
e = n->data;
q->next = n->next;
free(n);

return e;
}销毁链表int DestroyLink(Node **l)
{
if (NULL == (*l) || (*l)->next != NULL)
{
return FAILURE;
}

free(*l);
(*l) = NULL;

return SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: