链表
数据元素随机存储,通过指针表示数据之间的逻辑关系的结构就是链式存储结构,即链表。
一个链表节点包括一个数据域和一个指针域。数据域存储数据,指针域存储下一个节点的地址。
链表的结构体声明如下:
typedef struct node_st
{
int data;
struct node_st *next;
}list;
链表创建
创建一个链表,先声明一个list类型的指针,并分配给其list长度的空间,返回这个指针即可。
list *list_create() //链表创建
{
list *me;
me = malloc(sizeof(list));
if(me == NULL)
return NULL;
me -> next = NULL;
return me;
}
链表插入数据
在链表me上的第i个位置插入元素data:需要先找到位置i的节点node,给新节点newnode分配好空间后,将位置i的node->next赋给newnode->next,把newnode的地址赋给node->next,同时把数据data赋给newnode->data,即可完成插入。
int list_insert_at(list *me, int i, datatype *data)
{
int j = 0;
list *node = me, *newnode;
if(i < 0)
return -1;
while(j < i && node != NULL) // 从头遍历到要插入的位置i
{
node = node -> next;
j++;
}
if(node)
{
newnode = malloc(sizeof(*newnode));
if(newnode == NULL)
return -2;
newnode -> data = *data;
newnode ->next = node -> next;
node -> next = newnode;
}
else
return -3;
return 0;
}
链表释放
从链表头节点me的下一个节点node开始free,直到第一个节点node为空,在free头节点me。
void list_destroy(list *me)
{
list *node, *temp;
for(node = me -> next; node != NULL; node = temp)
{
temp = node -> next;
free(node);
}
free(me);
return;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)