C语言 创建一个有序链表,并对此表进行增,删,查,改操作
时间: 2023-09-06 08:10:39 浏览: 52
好的,我可以为您介绍一下如何使用 C 语言创建一个有序链表,并对其进行增、删、查、改操作。
首先,我们需要定义链表节点的结构体,包括一个数据域和一个指向下一个节点的指针域,如下所示:
```
typedef struct node {
int data;
struct node *next;
} Node;
```
接下来,我们可以定义一个链表的头结点,以及一些操作函数。
创建有序链表:
```
Node *createList() {
Node *head = NULL;
int data;
printf("请输入节点的值,输入-1结束:\n");
scanf("%d", &data);
while (data != -1) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *current = head;
Node *previous = NULL;
while (current != NULL && current->data < data) {
previous = current;
current = current->next;
}
if (previous == NULL) {
newNode->next = head;
head = newNode;
} else {
previous->next = newNode;
newNode->next = current;
}
}
printf("请输入节点的值,输入-1结束:\n");
scanf("%d", &data);
}
return head;
}
```
在这个函数中,我们首先定义头结点为 NULL,然后循环读入节点的值,创建新的节点,并将其插入到链表中。我们将节点按照从小到大的顺序插入,因此需要使用类似插入排序的算法。如果当前链表为空,则将新节点作为头结点。否则,从头结点开始遍历链表,找到插入位置,然后插入新节点。
插入节点:
```
void insertNode(Node *head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *current = head;
Node *previous = NULL;
while (current != NULL && current->data < data) {
previous = current;
current = current->next;
}
if (previous == NULL) {
newNode->next = head;
head = newNode;
} else {
previous->next = newNode;
newNode->next = current;
}
}
}
```
这个函数与创建链表函数类似,只是我们不需要重复输入节点的值。我们将要插入的节点按照同样的方式插入到链表中。
删除节点:
```
void deleteNode(Node *head, int data) {
Node *current = head;
Node *previous = NULL;
while (current != NULL && current->data != data) {
previous = current;
current = current->next;
}
if (current == NULL) {
printf("没有找到要删除的节点!\n");
} else {
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
}
}
```
这个函数首先遍历链表,找到要删除的节点。如果找到了,则将其从链表中删除并释放内存。否则,输出提示信息。
查找节点:
```
Node *findNode(Node *head, int data) {
Node *current = head;
while (current != NULL && current->data != data) {
current = current->next;
}
return current;
}
```
这个函数遍历链表,找到要查找的节点并返回其指针。如果没有找到,则返回 NULL。
修改节点:
```
void modifyNode(Node *head, int oldData, int newData) {
Node *current = findNode(head, oldData);
if (current == NULL) {
printf("没有找到要修改的节点!\n");
} else {
current->data = newData;
}
}
```
这个函数先调用查找节点的函数,找到要修改的节点。如果找到了,则将其数据域修改为新的值。否则,输出提示信息。
以上就是使用 C 语言创建有序链表并进行增、删、查、改操作的基本代码。