单链表的增、删、改、查(原创)
由 王宇 原创并发布:
以下代码均在linux 环境下,gcc v4.5 编译调试通过。
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }*head; void append(int number) { struct node *append_node = NULL, *right = NULL; append_node = (struct node *)malloc(sizeof(struct node)); if(append_node == NULL) { perror("Error: memory alloced failed at function of append!"); exit(EXIT_FAILURE); } append_node->data = number; append_node->next = NULL; if(head == NULL) { head = append_node; return; } right = head; while(right->next != NULL) { right = right->next; } right->next = append_node; } void add(int number) { struct node *add_node = NULL; add_node = (struct node *)malloc(sizeof(struct node)); if(add_node == NULL) { perror("Error: memory alloced failed at function of add!"); exit(EXIT_FAILURE); } add_node->data = number; add_node->next = NULL; if(head== NULL) { head = add_node; } else { add_node->next = head; head = add_node; } } void insert_at(int number, int position) { int i; struct node *insert_node = NULL, *left = NULL, *right = NULL; left = head; if(left == NULL) { perror("Error: linked list wasnot created!"); return; } if(position < 1) { perror("Error: Did not find position!"); return; } for(i = 0; i < position; i++) { if(left != NULL ) { if(i == position - 1) { right = left->next; break; } else { left = left->next; } } else { perror("Error: Did not find position!"); return; } } insert_node = (struct node *)malloc(sizeof(struct node)); if(insert_node == NULL) { perror("Error: memory alloced failed at function of append!"); exit(EXIT_FAILURE); } insert_node->data = number; insert_node->next = right; left->next = insert_node; } int delete_number(int number) { struct node *linked_list = NULL, *previous = NULL; linked_list = head; while (linked_list != NULL) { if(linked_list->data == number) { if(linked_list == head) { head = linked_list->next; free(linked_list); return 1; } else { previous->next = linked_list->next; free(linked_list); return 1; } } else { previous = linked_list; linked_list = linked_list->next; } } return 0; } void delete_all() { struct node *linked_list = NULL; linked_list = head; while ( head != NULL) { linked_list = head->next; head = head->next; free(linked_list); } } void display() { struct node *linked_list = NULL; linked_list = head; while ( linked_list != NULL) { printf("Data of linked list is %d \n", linked_list->data); linked_list = linked_list->next; } } int count_sum() { int sum = 0; struct node *linked_list = NULL; linked_list = head; while ( linked_list != NULL) { sum++; linked_list = linked_list->next; } return sum; } int main() { int i, number, position; while(1) { printf("\nList Operations\n"); printf("===============\n"); printf("1.Create\n"); printf("2.Add\n"); printf("3.Append\n"); printf("4.Insert\n"); printf("5.Display\n"); printf("6.Size\n"); printf("7.Delete\n"); printf("8.DeleteAll\n"); printf("0.Exit\n"); printf("Enter your choice : "); if(scanf("%d",&i) <=0) { printf("Enter only an Integer\n"); exit(EXIT_FAILURE); } else { switch(i) { case 1: for(i = 1; i < 10; i++) { append(i); } break; case 2: printf("Enter the number to add: \n"); if(scanf("%d",&number) <=0) { printf("Enter only an Integer\n"); exit(EXIT_FAILURE); } else { add(number); } break; case 3: printf("Enter the number to append: \n"); if(scanf("%d",&number) <=0) { printf("Enter only an Integer\n"); exit(EXIT_FAILURE); } else { append(number); } break; case 4: printf("Enter the number to insert: \n"); if(scanf("%d",&number) <=0) { printf("Enter only an Integer\n"); exit(EXIT_FAILURE); } else { printf("Enter the position: \n"); if(scanf("%d",&position) <=0) { printf("Enter only an Integer\n"); exit(EXIT_FAILURE); } else { insert_at(number, position); } } break; case 5: display(); break; case 6: number = count_sum(); printf("Sum of linked list is %d", number); break; case 7: printf("Enter the number to delete: \n"); if(scanf("%d",&number) <=0) { printf("Enter only an Integer\n"); exit(EXIT_FAILURE); } else { delete_number(number); } break; case 8: delete_all(); break; case 0: exit(1); break; default: printf("Invalid option\n"); } } } exit(1); }
相关推荐
下面我们将详细探讨如何在Java中实现单链表的增、删、改、查功能,以及如何进行选择排序、冒泡排序和反转排序。 1. **单链表的定义**: - 单链表的每个节点通常包括两部分:数据域(存储元素)和指针域(存储下一...
【标题】"学生信息管理系统c++(单链表增删改查)"是一个基于C++编程语言实现的学生信息管理系统的项目。这个系统的核心功能是利用单链表数据结构来存储、管理和操作学生信息,包括添加、删除、修改和查询学生记录。 ...
C语言编写的单链表增删改查,实现了单链表的增加,删除,修改,查询等功能
链表是一种常见的数据结构,资源包含了我对单链表的增删改查实现,本资源是不带头结点的单链表的增删改查,个人能力有限,希望指出不足之处,与大家共勉
在这个场景中,我们关注的是如何利用单链表来存储和管理学生信息,实现增、删、改、查等基本操作。 首先,我们要创建一个表示学生信息的结构体或类,通常包括姓名、学号、成绩等属性。例如,可以定义如下: ```c++...
这个项目"单链表c语言实现增删改查操作"是基于VS2008运行环境,用C语言编程实现对单链表的基本操作,包括插入、删除、修改和查询元素,并将结果输出到控制台。 首先,我们需要定义链表的节点结构: ```c typedef ...
简易单链表增删改查功能实现。新增内容:新增单链表LruCache算法增删改查,对学习LruCache 算法有一定帮助。
以上就是对单链表进行增删改查操作的详细实现。通过这些方法,我们可以对链表进行各种操作,实现对链表数据的灵活管理和处理。在实际应用中,单链表是一种非常重要的数据结构,它被广泛应用于各种算法和程序设计中。...
### C语言实现单链表-增删改查 #### 一、链表基本概念与特点 链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含两部分:数据域(存放实际数据)和指针域(指向下一个节点的地址)。与数组相比,...
实现单链表的增删改查,,仅供参考,并不太完善
单链表是一种基础的数据...总结来说,单链表是一种动态数据结构,适合于实现各种增删改查操作,特别是当数据的顺序不是固定的,或者需要快速插入和删除元素时。理解和掌握单链表的基本操作是数据结构和算法学习的基础。
在本文中,我们将深入探讨如何使用C#编程语言实现单链表,并结合图形用户界面(GUI)来实现增、删、改、查等基本操作。单链表是一种基础的数据结构,它由一系列节点组成,每个节点包含数据以及指向下一个节点的引用...
单链表源码,包括增删改查
在这个主题中,我们将深入探讨"单链表"这种基本的数据结构以及在C语言中如何进行增删改查的操作。 单链表是一种线性数据结构,其中的元素(节点)通过指向下一个元素的指针连接在一起。每个节点包含两部分:数据域...
实验四主要涉及的是单链表的操作,包括增、删、改、查这四个基本操作。在计算机科学中,单链表是一种线性数据结构,它的每个元素(节点)包含两个部分:一部分是数据域,用于存储信息;另一部分是指针域,用于存储下...
线性表的增删改查操作 - **插入**:在线性表的指定位置插入一个新元素,需要找到插入点并更新指针。对于链表,这涉及修改前后两个节点的指针。 - **删除**:根据给定的元素或位置删除一个元素,需要找到要删除的...
本资料包提供了一套完整的C语言数据结构库,特别关注于队列、栈、链表和树这四种基本数据结构的增删改查操作。 1. 队列:队列是一种先进先出(FIFO)的数据结构,类似于现实生活中的排队。在这个库中,你可以找到...
在给定的“基于java的单链表增、删、改、查、去重操作”主题中,我们将详细讨论如何实现这些基本功能以及链表的去重操作。 1. **链表节点的定义**: 首先,我们需要创建一个表示链表节点的类,它通常包含两个属性...
大三上学期数据结构第一次实验,内容: 1)数据文件为cet4word.txt,其中每行描述了一个词条,包含英文单词、词性及中文释义等属性 2)将每个词条定义为一个结构体 3)能够实现词典的装载、添加、删除、按英文单词...