定义单链表的数据类型将头插法和尾插法插入删除查找修改技术拟制输出等操作都定义成子函数的形式最后在主函数中调用它并将每一种操作前后的输出结果以查看每一种操作的效果,用c语言编写
时间: 2024-06-04 22:13:52 浏览: 81
#include <stdio.h>
#include <stdlib.h>
//定义单链表节点结构体
typedef struct Node {
int data; //数据域
struct Node *next; //指针域
} Node;
//头插法插入节点
void headInsert(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node)); //创建新节点
newNode->data = data; //为节点赋值
newNode->next = *head; //将新节点的next指向原头节点
*head = newNode; //将头指针指向新节点
}
//尾插法插入节点
void tailInsert(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node)); //创建新节点
newNode->data = data; //为节点赋值
newNode->next = NULL; //将新节点的next指向NULL
if (*head == NULL) { //如果链表为空,则将头指针指向新节点
*head = newNode;
return;
}
Node *temp = *head;
while (temp->next != NULL) { //遍历链表,找到最后一个节点
temp = temp->next;
}
temp->next = newNode; //将最后一个节点的next指向新节点
}
//删除指定值的节点
void deleteNode(Node **head, int data) {
if (*head == NULL) { //链表为空,直接返回
return;
}
Node *temp = *head;
if ((*head)->data == data) { //头节点为要删除的节点
*head = (*head)->next; //将头指针指向下一个节点
free(temp); //释放原头节点内存
return;
}
while (temp->next != NULL && temp->next->data != data) { //遍历链表,找到要删除的节点
temp = temp->next;
}
if (temp->next == NULL) { //要删除的节点不存在
return;
}
Node *delNode = temp->next;
temp->next = delNode->next; //将前驱节点的next指向后继节点
free(delNode); //释放要删除的节点内存
}
//查找指定值的节点
Node* searchNode(Node *head, int data) {
while (head != NULL && head->data != data) { //遍历链表,找到要查找的节点
head = head->next;
}
return head;
}
//修改指定值的节点
void modifyNode(Node *head, int oldData, int newData) {
Node *node = searchNode(head, oldData); //先查找要修改的节点
if (node != NULL) { //节点存在,修改节点的值
node->data = newData;
}
}
//输出链表
void printList(Node *head) {
printf("链表:");
while (head != NULL) { //遍历链表,输出节点的值
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *head = NULL; //定义头指针,初始化为空
headInsert(&head, 1); //头插法插入节点1
headInsert(&head, 2); //头插法插入节点2
tailInsert(&head, 3); //尾插法插入节点3
tailInsert(&head, 4); //尾插法插入节点4
printList(head); //输出链表
deleteNode(&head, 2); //删除值为2的节点
printList(head); //输出链表
Node *node = searchNode(head, 3); //查找值为3的节点
if (node != NULL) { //节点存在,输出节点的值
printf("查找到的节点的值为:%d\n", node->data);
}
modifyNode(head, 4, 5); //将值为4的节点修改为5
printList(head); //输出链表
return 0;
}
阅读全文