单向链表 增 删 改 查

来源:互联网 发布:java编程培训机构 编辑:程序博客网 时间:2024/06/05 02:13
#include <stdio.h>#include <malloc.h>typedef struct node {int num;node* next;} NODE;int lenght = -1;//线性表的链式结构的长度/*    创建节点 */NODE* create_node(int num) {NODE* n = (NODE*) malloc(sizeof(NODE));n->num = num;n->next = NULL;lenght++;return n;}/*    插入一个结点到某个数字的后面    return 插入是否成功*/int insert_node(NODE* head, int how, int num) {NODE* p = head->next;while (p != NULL) {if (p->num == how) {NODE* z = p->next;p->next = create_node(num);p->next->next = z;return 1;}p = p->next;}return 0;}/*    删除一个结点*/int delete_node(NODE* head, int how) {NODE* p = head->next;NODE* last = head;while (p != NULL) {if (p->num == how) {last->next = p->next;free(p);p = NULL;lenght--;return 1;}p = p->next;last = last->next;}return 0;}/*    修改一个结点*/void update_node(NODE* head, int how, int num) {NODE* p = head->next;while (p != NULL) {if (p->num == how) {p->num = num;return;}p = p->next;}printf("该元素不存在!\n");}/*    查询一个节点*/void search_node(NODE* head, int how) {NODE* p = head->next;while (p != NULL) {if (how == p->num) {printf("查询到 %d\n", p->num);return;}p = p->next;}printf("该元素不存在!\n");}void print_list(NODE* head) {  //线性表的链式结构的遍历NODE* p = head;while (p != NULL) {printf("%d ", p->num);p = p->next;}printf("\n\n");}int main() {NODE* headNode = create_node(-1);  //创建头结点NODE* p = headNode;for (int i = 0; i < 10; i++) {p->next = create_node(i);if (headNode->next == NULL) {printf("NULL");}p = p->next;}printf("线性表的链式结构的长度 = %d\n", lenght);print_list(headNode->next);printf("--插入数据:100\n");insert_node(headNode, 4, 100); //在数字4的后面插入100 printf("线性表的链式结构的长度 = %d\n", lenght);print_list(headNode->next);printf("--删除数据:0\n");delete_node(headNode, 0);  //删除数字为0的节点printf("线性表的链式结构的长度 = %d\n", lenght);print_list(headNode->next);printf("--修改数据:1\n");update_node(headNode, 1, 111); //修改数字1为111printf("线性表的链式结构的长度 = %d\n", lenght);print_list(headNode->next);printf("--查询数据:1000\n");search_node(headNode, 1000); //查询1000是否存在于链表当中  return 0;}


0 0
原创粉丝点击