C语言单链表常见操作汇总
单链表是C语言中常见的一种数据结构,其主要特点是动态内存分配和对元素的动态插入和删除操作。单链表的实现需要掌握以下几个常见的操作:
初始化链表
链表的初始化操作是将一个空链表初始化,此时该链表不包含任何元素。
typedef struct node
{
int data;
struct node *next;
}Node;
typedef struct
{
Node *head;
Node *tail;
}LinkedList;
void InitList (LinkedList *list)
{
list->head = NULL;
list->tail = NULL;
}
添加元素到链表尾部
链表的尾插法操作是将一个元素插入链表尾部,需要注意的是插入的元素实际上是一个新节点。
void InsertTail (LinkedList *list, int data)
{
Node *newNode = (Node*) malloc (sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (list->head == NULL)
{
list->head = newNode;
}
else
{
list->tail->next = newNode;
}
list->tail = newNode;
}
示例1:插入元素2到链表尾部
LinkedList list;
InitList(&list);
InsertTail(&list, 1);
InsertTail(&list, 2);
InsertTail(&list, 3);
//此时链表作为一个整体的数据结构为:1 -> 2 -> 3 -> NULL
从链表中删除指定元素
链表的删除操作是将指定元素从链表中删除,此处首先需要找到该元素所在的节点,然后再进行删除操作。
void DeleteNode (LinkedList *list, int data)
{
Node *p = list->head;
Node *prev = NULL;
while (p != NULL)
{
if (p->data == data)
{
if (prev == NULL)
{
list->head = p->next;
}
else
{
prev->next = p->next;
}
if (list->tail == p)
{
list->tail = prev;
}
free (p);
return;
}
prev = p;
p = p->next;
}
}
示例2:从链表中删除元素2
LinkedList list;
InitList(&list);
InsertTail(&list, 1);
InsertTail(&list, 2);
InsertTail(&list, 3);
DeleteNode(&list, 2);
//此时链表作为一个整体的数据结构为:1 -> 3 -> NULL
以上是关于C语言单链表的常见操作,需要注意的是对链表的操作需要注意指针的使用,否则会引起内存泄漏或者其他问题。同时对于链表的操作还有其他更加高级的技术,例如双链表、循环链表等,需要针对实际情况进行选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言单链表常见操作汇总 - Python技术站