单循环链表结构体和单链表结构体一样吗
时间: 2024-03-24 19:33:07 浏览: 31
单循环链表结构体和单链表结构体在定义上是相似的,但在指针域的处理上有所不同。单链表的指针域指向下一个结点,而单循环链表的指针域指向下一个结点,并且最后一个结点的指针域指向头结点,形成一个循环。下面是单循环链表的结点结构的定义示例:
```c
typedef struct node{
Datatype data; //数据域
struct node *next; //指针域
}Node,*Link;
```
在单循环链表中,头结点的指针域指向第一个结点,最后一个结点的指针域指向头结点。这样就形成了一个循环,可以通过遍历链表的方式访问所有的结点。单循环链表的操作和单链表类似,只是在遍历链表时需要判断是否回到了头结点来确定是否遍历完整个链表。
相关问题
单循环链表基本操作代码
单循环链表是一种特殊的链表,它的最后一个节点指向第一个节点,形成一个环。下面是单循环链表的基本操作代码,包括创建、插入、删除、遍历等。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单循环链表结构体
typedef struct node {
int data;
struct node *next;
} Node, *List;
// 创建单循环链表
List createList() {
List head = (List)malloc(sizeof(Node));
head->next = head; // 指向自身,形成一个空的循环链表
return head;
}
// 插入节点,将新节点插入到链表尾部
void insertNode(List L, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = L; // 新节点的 next 指向头节点
Node *p = L;
while (p->next != L) { // 找到最后一个节点
p = p->next;
}
p->next = newNode; // 将新节点插入到链表尾部
}
// 删除节点,删除指定位置上的节点
void deleteNode(List L, int pos) {
if (L->next == L) { // 链表为空
printf("链表为空,删除失败!\n");
return;
}
Node *p = L->next;
Node *pre = L;
int i = 1;
while (p != L && i < pos) { // 找到要删除的节点
pre = p;
p = p->next;
i++;
}
if (p == L) { // 没有找到要删除的节点
printf("要删除的节点不存在!\n");
return;
}
pre->next = p->next; // 删除节点
free(p);
}
// 遍历链表,输出节点的值
void traverseList(List L) {
if (L->next == L) { // 链表为空
printf("链表为空!\n");
return;
}
Node *p = L->next;
while (p != L) { // 输出节点的值
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
List L = createList();
insertNode(L, 1);
insertNode(L, 2);
insertNode(L, 3);
printf("链表初始值为:");
traverseList(L);
deleteNode(L, 2);
printf("删除第二个节点后,链表的值为:");
traverseList(L);
return 0;
}
```
单循环链表更新代码C语言
以下是单循环链表的更新代码示例,包括在指定位置插入节点、删除指定位置节点和修改指定位置节点的值:
```
// 定义单循环链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 在指定位置插入节点
void insertNode(Node **head, int pos, int val) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = val;
newNode->next = NULL;
if (*head == NULL) { // 链表为空
*head = newNode;
(*head)->next = *head;
return;
}
if (pos == 1) { // 在头部插入节点
newNode->next = *head;
Node *tail = *head;
while (tail->next != *head) {
tail = tail->next;
}
tail->next = newNode;
*head = newNode;
return;
}
Node *prev = NULL;
Node *curr = *head;
int i = 1;
while (i < pos && curr->next != *head) { // 在指定位置插入节点
prev = curr;
curr = curr->next;
i++;
}
prev->next = newNode;
newNode->next = curr;
}
// 删除指定位置节点
void deleteNode(Node **head, int pos) {
if (*head == NULL) { // 链表为空
return;
}
if (pos == 1) { // 删除头节点
Node *tail = *head;
while (tail->next != *head) {
tail = tail->next;
}
*head = (*head)->next;
tail->next = *head;
free(*head);
return;
}
Node *prev = NULL;
Node *curr = *head;
int i = 1;
while (i < pos && curr->next != *head) { // 删除指定位置节点
prev = curr;
curr = curr->next;
i++;
}
if (curr->next == *head) { // 如果删除的是尾节点
prev->next = *head;
free(curr);
} else {
prev->next = curr->next;
free(curr);
}
}
// 修改指定位置节点的值
void modifyNode(Node *head, int pos, int val) {
if (head == NULL) { // 链表为空
return;
}
Node *curr = head;
int i = 1;
while (i < pos && curr->next != head) { // 找到指定位置节点
curr = curr->next;
i++;
}
if (i == pos) { // 找到节点
curr->data = val;
}
}
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)