首先,单循环链表是一种链式存储结构,其中每个节点都包含数据和指向下一个节点的指针,并且最后一个节点指向头节点,形成一个环。下面我们具体讲解一下单循环链表的表示与实现实例。
单循环链表的表示
单循环链表的表示方式可以用C语言的结构体来实现。定义一个结构体来表示单循环链表的每个节点,定义一个指向该结构体的指针来表示整个链表的头指针。具体实现代码如下:
/* 定义单循环链表节点结构体 */
typedef struct node
{
int data; // 存储数据
struct node *next; // 指向下一个节点
} Node;
/* 定义单循环链表的头指针 */
Node *head = NULL;
单循环链表的实现
插入节点
单循环链表的插入节点操作需要考虑两种情况:在链表头部插入节点和在链表尾部插入节点。
在链表头部插入节点的示例代码如下:
void insert(int value)
{
/* 创建新节点 */
Node *new_node = (Node*) malloc(sizeof(Node));
new_node->data = value;
/* 若链表为空,则创建单循环链表 */
if (head == NULL)
{
head = new_node;
new_node->next = head;
}
else
{ /* 插入节点到链表头部 */
new_node->next = head->next;
head->next = new_node;
int temp = head->data;
head->data = new_node->data;
new_node->data = temp;
}
}
在链表尾部插入节点的示例代码如下:
void insert_end(int value)
{
/* 获取链表尾节点 */
Node *end_node = get_end_node();
/* 创建新节点 */
Node *new_node = (Node*) malloc(sizeof(Node));
new_node->data = value;
new_node->next = head;
/* 若链表为空,则创建单循环链表 */
if (head == NULL)
{
head = new_node;
new_node->next = head;
}
else
{ /* 将新节点插入到链表尾部 */
end_node->next = new_node;
}
}
删除节点
单循环链表的删除操作需要考虑两种情况:删除头节点和删除其他节点。
删除头节点的示例代码如下:
void delete()
{
if (head == NULL) return;
Node *p = head->next, *q = head;
/* 删除头节点 */
q->next = p->next;
int temp = q->data;
q->data = p->data;
p->data = temp;
if (head->next == head)
{
free(p);
head = NULL;
}
else
{
head = head->next;
free(p);
}
}
删除其他节点的示例代码如下:
void delete_by_value(int value)
{
Node *p = head->next, *q = head;
/* 查找要删除的节点 */
while (p != head)
{
if (p->data == value) break;
q = p;
p = p->next;
}
if (p == head)
{
if (p->data == value)
{ /* 如果删除的是唯一的节点,直接删除 */
free(head);
head = NULL;
return;
}
else
{
printf("\n%d not found in the list\n", value);
return;
}
}
/* 删除其他节点 */
q->next = p->next;
int temp = q->data;
q->data = p->data;
p->data = temp;
free(p);
}
至此,单循环链表的表示与实现实例已经讲解完成,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言单循环链表的表示与实现实例详解 - Python技术站