`

单链表的增、删、改、查

 
阅读更多

 

单链表的增、删、改、查(原创)

 

 

由 王宇 原创并发布:

 

以下代码均在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单链表增删改查的实现

    下面我们将详细探讨如何在Java中实现单链表的增、删、改、查功能,以及如何进行选择排序、冒泡排序和反转排序。 1. **单链表的定义**: - 单链表的每个节点通常包括两部分:数据域(存储元素)和指针域(存储下一...

    学生信息管理系统c++(单链表增删改查)

    【标题】"学生信息管理系统c++(单链表增删改查)"是一个基于C++编程语言实现的学生信息管理系统的项目。这个系统的核心功能是利用单链表数据结构来存储、管理和操作学生信息,包括添加、删除、修改和查询学生记录。 ...

    c语言 单链表的增删改查

    C语言编写的单链表增删改查,实现了单链表的增加,删除,修改,查询等功能

    单链表的增删改查.c

    链表是一种常见的数据结构,资源包含了我对单链表的增删改查实现,本资源是不带头结点的单链表的增删改查,个人能力有限,希望指出不足之处,与大家共勉

    单链表的建立及增删改查等操作(学生信息)

    在这个场景中,我们关注的是如何利用单链表来存储和管理学生信息,实现增、删、改、查等基本操作。 首先,我们要创建一个表示学生信息的结构体或类,通常包括姓名、学号、成绩等属性。例如,可以定义如下: ```c++...

    单链表c语言实现增删改查操作

    这个项目"单链表c语言实现增删改查操作"是基于VS2008运行环境,用C语言编程实现对单链表的基本操作,包括插入、删除、修改和查询元素,并将结果输出到控制台。 首先,我们需要定义链表的节点结构: ```c typedef ...

    简易单链表实现,附带LruCache算法的增删改查

    简易单链表增删改查功能实现。新增内容:新增单链表LruCache算法增删改查,对学习LruCache 算法有一定帮助。

    java实现单链表增删改查的实例代码详解

    以上就是对单链表进行增删改查操作的详细实现。通过这些方法,我们可以对链表进行各种操作,实现对链表数据的灵活管理和处理。在实际应用中,单链表是一种非常重要的数据结构,它被广泛应用于各种算法和程序设计中。...

    C语言实现单链表-增删改查.pdf

    ### C语言实现单链表-增删改查 #### 一、链表基本概念与特点 链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含两部分:数据域(存放实际数据)和指针域(指向下一个节点的地址)。与数组相比,...

    链表的增删改查

    实现单链表的增删改查,,仅供参考,并不太完善

    单链表的增删改查(包含有序、无序、重复和不重复)

    单链表是一种基础的数据...总结来说,单链表是一种动态数据结构,适合于实现各种增删改查操作,特别是当数据的顺序不是固定的,或者需要快速插入和删除元素时。理解和掌握单链表的基本操作是数据结构和算法学习的基础。

    C#实现单链表的增删改查

    在本文中,我们将深入探讨如何使用C#编程语言实现单链表,并结合图形用户界面(GUI)来实现增、删、改、查等基本操作。单链表是一种基础的数据结构,它由一系列节点组成,每个节点包含数据以及指向下一个节点的引用...

    单链表源码,包括增删改查

    单链表源码,包括增删改查

    C语言数据结构单链表的增删改查

    在这个主题中,我们将深入探讨"单链表"这种基本的数据结构以及在C语言中如何进行增删改查的操作。 单链表是一种线性数据结构,其中的元素(节点)通过指向下一个元素的指针连接在一起。每个节点包含两部分:数据域...

    实验四 单链表的增删改查.docx

    实验四主要涉及的是单链表的操作,包括增、删、改、查这四个基本操作。在计算机科学中,单链表是一种线性数据结构,它的每个元素(节点)包含两个部分:一部分是数据域,用于存储信息;另一部分是指针域,用于存储下...

    线性表和链表的存储和增删改查c++

    线性表的增删改查操作 - **插入**:在线性表的指定位置插入一个新元素,需要找到插入点并更新指针。对于链表,这涉及修改前后两个节点的指针。 - **删除**:根据给定的元素或位置删除一个元素,需要找到要删除的...

    C语言数据结构库(队列,栈,链表,树的增删改查)

    本资料包提供了一套完整的C语言数据结构库,特别关注于队列、栈、链表和树这四种基本数据结构的增删改查操作。 1. 队列:队列是一种先进先出(FIFO)的数据结构,类似于现实生活中的排队。在这个库中,你可以找到...

    基于java的单链表增、删、改、查、去重操作

    在给定的“基于java的单链表增、删、改、查、去重操作”主题中,我们将详细讨论如何实现这些基本功能以及链表的去重操作。 1. **链表节点的定义**: 首先,我们需要创建一个表示链表节点的类,它通常包含两个属性...

    数据结构单链表实验-增删查

    大三上学期数据结构第一次实验,内容: 1)数据文件为cet4word.txt,其中每行描述了一个词条,包含英文单词、词性及中文释义等属性 2)将每个词条定义为一个结构体 3)能够实现词典的装载、添加、删除、按英文单词...

Global site tag (gtag.js) - Google Analytics