您的位置:首页 > 文旅 > 美景 > 外贸行业的现状分析及发展趋势_市场营销培训机构排名_网络营销试卷_企业管理培训班

外贸行业的现状分析及发展趋势_市场营销培训机构排名_网络营销试卷_企业管理培训班

2024/12/23 5:31:49 来源:https://blog.csdn.net/m0_58341340/article/details/143028283  浏览:    关键词:外贸行业的现状分析及发展趋势_市场营销培训机构排名_网络营销试卷_企业管理培训班
外贸行业的现状分析及发展趋势_市场营销培训机构排名_网络营销试卷_企业管理培训班
 
#include <stdio.h>
#include <stdlib.h>typedef int datatype; // 定义链表存储的数据类型// 定义链表节点结构体
typedef struct link {datatype data;          // 数据域struct link *next;      // 指针域,指向下一个节点
} link_t;

初始化链表

/*** 初始化链表* @param head 指向链表头指针的指针*/
void Link_Init(link_t **head) {*head = NULL; // 初始化头指针为空,表示链表为空
}

头插法插入节点

/*** 头插法插入新节点* @param head 指向链表头指针的指针* @param data 要插入的数据*/
void Link_Insert_Head(link_t **head, datatype data) {// 分配新节点link_t *new_node = (link_t *)malloc(sizeof(link_t));if (new_node == NULL) {// 处理内存分配失败的情况fprintf(stderr, "Memory allocation failed for new node.\n");exit(EXIT_FAILURE);}// 设置新节点的数据new_node->data = data;// 新节点的下一个节点是当前的头节点new_node->next = *head;// 更新头指针为新节点*head = new_node;
}

尾插法插入节点

/*** 尾插法插入新节点* @param head 指向链表头指针的指针* @param data 要插入的数据*/
void Link_Insert_Tail(link_t **head, datatype data) {// 分配新节点link_t *new_node = (link_t *)malloc(sizeof(link_t));if (new_node == NULL) {// 处理内存分配失败的情况fprintf(stderr, "Memory allocation failed for new node.\n");exit(EXIT_FAILURE);}// 设置新节点的数据new_node->data = data;new_node->next = NULL;if (*head == NULL) {// 如果链表为空,新节点就是头节点*head = new_node;} else {// 否则找到链表的尾节点,并将新节点插入到尾部link_t *temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = new_node;}
}

删除节点

/*** 删除包含特定数据的节点* @param head 指向链表头指针的指针* @param data 要删除的数据*/
void Link_Delete(link_t **head, datatype data) {link_t *temp = *head, *prev = NULL;// 如果头节点本身包含要删除的数据if (temp != NULL && temp->data == data) {*head = temp->next; // 更新头指针free(temp); // 释放旧头节点return;}// 搜索要删除的节点,保持前一个节点的指针while (temp != NULL && temp->data != data) {prev = temp;temp = temp->next;}// 如果没有找到要删除的节点if (temp == NULL) return;// 断开节点并释放内存prev->next = temp->next;free(temp);
}

搜索节点

/*** 搜索包含特定数据的节点* @param head 链表头指针* @param data 要搜索的数据* @return 指向找到的节点的指针,如果未找到则返回NULL*/
link_t *Link_Search(link_t *head, datatype data) {link_t *current = head;while (current != NULL) {if (current->data == data) {return current; // 找到节点,返回指针}current = current->next;}return NULL; // 未找到节点,返回NULL
}

打印链表

/*** 打印链表中的所有节点* @param head 链表头指针*/
void Link_Print(link_t *head) {link_t *current = head;printf("链表元素如下:\n");while (current != NULL) {printf("%d ", current->data);current = current->next;}printf("\n");
}

逆转链表

/*** 逆转链表* @param head 指向链表头指针的指针*/
void Link_Reverse(link_t **head) {link_t *prev = NULL;link_t *current = *head;link_t *next = NULL;while (current != NULL) {next = current->next; // 保存下一个节点current->next = prev; // 逆转当前节点的指向prev = current;       // 移动 prev 指针current = next;       // 移动 current 指针}*head = prev; // 更新头指针为新的头节点
}

释放链表

/*** 释放链表占用的所有内存* @param head 链表头指针*/
void Link_Free(link_t *head) {link_t *current = head;link_t *next = NULL;while (current != NULL) {next = current->next;free(current);current = next;}
}

主函数示例

int main() {link_t *head;Link_Init(&head); // 初始化链表// 头插法插入数据Link_Insert_Head(&head, 1);Link_Insert_Head(&head, 2);Link_Insert_Head(&head, 3);printf("头插法插入后链表: ");Link_Print(head);// 尾插法插入数据Link_Insert_Tail(&head, 4);Link_Insert_Tail(&head, 5);Link_Insert_Tail(&head, 6);printf("尾插法插入后链表: ");Link_Print(head);// 删除节点Link_Delete(&head, 3);printf("删除节点 3 后链表: ");Link_Print(head);// 搜索节点link_t *found = Link_Search(head, 4);if (found != NULL) {printf("找到节点 4\n");} else {printf("未找到节点 4\n");}// 逆转链表Link_Reverse(&head);printf("逆转后链表: ");Link_Print(head);// 释放链表Link_Free(head);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com