以c语言函数形式实现循环单链表的建立、插入、查找、删除运算
时间: 2023-10-19 20:17:25 浏览: 96
循环单链表是一种特殊的单链表,其尾节点的指针指向头节点,形成一个循环。以下是基于C语言的循环单链表的建立、插入、查找、删除函数的实现:
1. 建立循环单链表
```c
//定义循环单链表的节点结构体
typedef struct node {
int data; //数据域
struct node* next; //指向下一个节点的指针
} Node, * LinkList;
//创建循环单链表
void createList(LinkList *L) {
*L = (LinkList)malloc(sizeof(Node)); //创建头节点
(*L)->next = *L; //尾节点指向头节点,形成循环
}
```
2. 插入节点
```c
//在循环单链表中插入节点
int insertNode(LinkList L, int pos, int data) {
int i = 0;
LinkList p, q;
p = L;
//找到插入位置的前一个节点
while (p->next != L && i < pos - 1) {
p = p->next;
i++;
}
//如果插入位置不合法
if (i > pos - 1 || p == L) {
return 0;
}
//创建新节点
q = (LinkList)malloc(sizeof(Node));
q->data = data;
//将新节点插入到p后面
q->next = p->next;
p->next = q;
return 1;
}
```
3. 查找节点
```c
//在循环单链表中查找节点
LinkList searchNode(LinkList L, int data) {
LinkList p = L->next;
//遍历链表,查找节点
while (p != L) {
if (p->data == data) {
return p; //找到节点,返回节点指针
}
p = p->next;
}
return NULL; //未找到节点,返回空指针
}
```
4. 删除节点
```c
//在循环单链表中删除节点
int deleteNode(LinkList L, int data) {
LinkList p = L->next, q = L;
//遍历链表,查找节点
while (p != L) {
if (p->data == data) {
//删除节点
q->next = p->next;
free(p);
return 1;
}
q = p;
p = p->next;
}
return 0; //未找到节点,返回0
}
```
阅读全文