`
hzy3774
  • 浏览: 992936 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

C语言单链表操作基础

 
阅读更多

C语言单链表操作基础

#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(NODE)

typedef struct _NODE//节点声明
{
	int val;
	struct _NODE* next;
} NODE, *PNODE;

void print(PNODE head){//打印所有节点
	while (head)
	{
		printf("%3d",head->val);
		head = head->next;
	}
	printf("\n");
}

void insertHead(PNODE *pHead, int val){//头插法
	PNODE n = (PNODE)malloc(LEN);
	n->val = val;
	n->next = *pHead;
	*pHead = n;
}

void insertTail(PNODE *pHead, int val){//尾插法
	PNODE t = *pHead;
	PNODE n = (PNODE)malloc(LEN);
	n->val = val;
	n->next = NULL;
	if (*pHead == NULL)
	{
		n->next = *pHead;
		*pHead = n;
	}else{
		while (t->next)
		{
			t = t->next;
		}
		t->next = n;
	}
}

void deleteHead(PNODE *pHead){//删除头
	if (*pHead == NULL)
	{
		return;
	}
	else
	{
		PNODE t = *pHead;
		*pHead = (*pHead)->next;
		free(t);
	}
}

void deleteTail(PNODE *pHead){//删除尾
	PNODE t = *pHead;
	if (t == NULL)
	{
		return;
	}
	else if (t->next == NULL)
	{
		free(t);
		*pHead = NULL;
	}
	else{		
		while (t->next->next != NULL)
		{
			t = t->next;
		}
		free(t->next);
		t->next = NULL;
	}
}

PNODE findByVal(PNODE head, int val){//根据值找到满足条件的第一个节点
	while (head != NULL && head->val != val)
	{
		head = head->next;
	}
	return head;
}

PNODE findByIndex(PNODE head, int index){//根据索引找节点
	if (index == 1)
	{
		return head;
	}
	else
	{
		int c = 1;
		while (head != NULL && index != c)
		{
			head = head->next;
			c++;
		}
	}
	return head;
}

void insertByIndex(PNODE *pHead, int index, int val){//根据索引插入节点
	if (index == 1)
	{
		insertHead(pHead, val);
	}
	else
	{
		PNODE t = findByIndex(*pHead,index - 1);
		if (t == NULL)
		{
			return;
		}
		else
		{
			PNODE n = t->next;
			t->next = (PNODE)malloc(LEN);
			t->next->next = n;
			t->next->val = val;
		}
	}
}

void deleteByIndex(PNODE *pHead, int index)//根据结点索引删除结点
{
	if (index == 1)
	{
		deleteHead(pHead);
	}
	else
	{
		PNODE t= findByIndex(*pHead, index - 1);
		if (t == NULL || t->next == NULL)
		{
			return;
		}else{
			PNODE n = t->next->next;
			free(t->next);
			t->next = n;
		}
	}
}

void deleteByVal(PNODE *pHead, int val)//根据值删掉第一个满足条件的
{
	if (*pHead == NULL)//如果空表退出
	{
		return;
	}
	else
	{
		if ((*pHead)->val == val)//如果第一个就是,删头
		{
			deleteHead(pHead);
		}
		else
		{
			PNODE t = *pHead;
			while (t->next != NULL && t->next->val != val)//遍历,若t的next为空或者next是要找的节点则退出
			{
				t = t->next;
			}
			if (t->next)//如果t指向要找的结点的上一个节点
			{
				PNODE n = t->next->next;//删除要找的结点
				free(t->next);
				t->next = n;
			}
		}
	}
}

void clear(PNODE *pHead)//清除链表
{
	while ((*pHead) != NULL)
	{
		deleteHead(pHead);//从头删除
	}
}

void main()
{
	PNODE head = NULL;

	insertTail(&head,1);
	deleteHead(&head);
	insertTail(&head,2);
	insertTail(&head,3);
	insertTail(&head,4);
	insertTail(&head,5);
	insertTail(&head,6);

	print(head);
	insertByIndex(&head, 6, 9);
	print(head);
	//deleteByIndex(&head,3);
	deleteByVal(&head, 2);
	print(head);
	clear(&head);
	print(head);
	insertByIndex(&head,1,12);
	print(head);
}

 

分享到:
评论

相关推荐

    C语言单链表实现19个功能完全详解.zip_C语言_C语言单链表_单链表

    在C语言中,单链表是一种基础且重要的数据结构,它在编程中有着广泛的应用。本文将详细解析如何使用C语言来实现单链表,并涵盖了19种不同的操作功能,帮助你深入理解这一核心概念。 单链表由一系列节点组成,每个...

    C语言单链表基本操作大全.doc

    C语言单链表基本操作大全 本文档为C语言单链表基本操作大全,涵盖了链表的初始化、插入、删除、查找、逆置、合并等基本操作。 链表初始化 链表初始化是指对链表进行初始化操作,使链表准备好进行后续的操作。链表...

    C语言单链表实现

    通过这些基本操作,你可以构建和操作简单的C语言单链表。在学习过程中,理解指针和动态内存分配的重要性是至关重要的,因为它们是实现链表的关键。此外,实践编写和调试这些操作的代码将有助于加深对链表工作原理的...

    C语言实现单链表的操作

    C语言实现单链表的所有基本操作,500行左右,键盘输入

    C语言单链表的基本操作.pdf

    ### C语言单链表的基本操作 #### 创建单链表 在C语言中,单链表是一种常见的线性数据结构,其特点是每个元素包含一个指向下一个元素的指针。创建单链表的过程通常包括定义节点结构体、初始化空链表、以及通过用户...

    C语言单链表创建打印

    在C语言中,单链表是一种基础且重要的数据结构,用于存储动态集合。单链表中的每个元素称为节点,每个节点包含两部分:数据域,用于存储数据;指针域,用于指向下一个节点。在本示例中,我们将讨论如何在C语言中创建...

    C语言 单链表的简单操作

    这个文件可能包含了上述操作的实现,通过阅读和分析代码,可以加深对单链表操作的理解。 总的来说,理解和熟练运用单链表是成为一名优秀的C语言程序员的基础,它在各种复杂数据结构和算法中都有应用。通过不断练习...

    学生信息管理系统(c语言单链表实现)

    总之,"学生信息管理系统(C语言单链表实现)"是一个综合性的编程练习,涵盖了C语言编程基础、数据结构(尤其是单链表)、动态内存管理以及基本的用户交互设计等多个方面。通过这个项目,学生可以全面提升自己的编程...

    c语言单链表 程序源码

    以下是一个简单的C语言单链表实现,包括插入、删除、遍历和打印链表功能: ```c #include #include // 定义链表节点结构 typedef struct Node { int data; struct Node* next; } Node; // 创建新节点 Node* ...

    c语言单链表的实现及测试

    单链表是计算机科学中数据结构的基础之一,它在C语言中的实现涉及到内存管理、指针操作以及数据结构的设计。本篇文章将详细讲解C语言如何实现单链表及其相关操作,并通过实际测试来验证其正确性。 首先,单链表是由...

    C语言单链表.pdf

    总之,这个C语言单链表实现涵盖了链表的基本操作,是学习数据结构和算法的好例子。理解并能够编写这样的代码对于任何想深入学习C语言和数据结构的人来说都是至关重要的。通过实践这些操作,可以更好地掌握链表的工作...

    C.rar_C语言单链表

    总之,这个"C语言单链表"项目提供了一个完整的实践示例,展示了如何在C语言中有效地操作和管理单链表,同时结合文件操作扩展了链表的实用性。通过理解和掌握这些基本操作,开发者可以在更复杂的程序设计中灵活运用...

    c语言单链表实现通讯录,支持保存数据到文件加载数据到文件

    以上是C语言单链表实现通讯录的主要知识点,这些概念和操作对于理解和实现任何动态数据结构都是至关重要的。通过这个项目,我们可以学习到如何有效地管理内存,以及如何在程序中持久化数据。同时,它也提供了一个...

    C语言单链表的实现源文件

    下面我们将深入探讨单链表的原理、创建、插入、删除等操作,并结合提供的C语言源文件进行解析。 首先,我们需要定义链表的节点结构。在C语言中,这通常通过结构体来实现。结构体中包含数据域(用于存储数据)和指针...

    C语言 循环单链表的简单操作

    通过阅读和理解代码,你可以深入学习循环单链表的内部工作原理,以及如何在C语言中有效地操作这种数据结构。这有助于提升你的编程技巧,特别是在处理动态数据集和优化内存使用时。 总之,循环单链表是数据结构和...

    c语言 单链表 两个多项式 相加。

    总之,使用C语言和单链表实现多项式的相加是一个典型的计算机科学问题,它涉及到数据结构的使用、链表的操作以及算法设计。理解这个过程可以帮助你提升在算法和数据结构领域的知识,这对任何IT职业都是非常重要的。

    c语言数据结构单链表的算法

    本节将深入探讨单链表的算法,包括其定义、基本操作以及在实际问题中的应用。 单链表是由一系列节点组成的数据结构,每个节点包含两部分:数据域和指针域。数据域用于存储实际的数据,而指针域则保存下一个节点的...

    精选_基于C语言单链表实现的超市商品信息管理系统_源码打包

    在本项目中,"精选_基于C语言单链表实现的超市商品信息管理系统_源码打包" 提供了一个使用C语言编程实现的超市商品信息管理系统的源代码。这个系统利用了数据结构中的单链表来存储和管理商品信息,使得在实际应用中...

    数据结构C语言单链表上实现插入和删除的算法实验报告.docx

    "数据结构C语言单链表上实现插入和删除的算法实验报告" 本文档是关于数据结构中的单链表实现插入和删除操作的算法实验报告,使用C语言编写,并提供了详细的实验步骤和实验结果。 单链表的基本操作 单链表是一种...

    c语言 单链表的各个功能

    以上是实现单链表基本操作的关键步骤。在实际编程中,为了提高代码的可读性和可维护性,通常会封装这些操作到一个链表相关的函数库中,如`init_list()`, `insert_node()`, `delete_node()`, `print_list()`等。此外...

Global site tag (gtag.js) - Google Analytics