`
Salmon2016
  • 浏览: 5439 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C语言--数据结构--单链表的基本实现

阅读更多
typedef int ElementType;

typedef struct LNode{
	ElementType data;
	struct LNode *ptr;
}LNODE,*LINKLIST;



/**
 *@Function: 单链表的建立(包含头结点)
 *@params  : 
 *@return  :
 *@note    : 
 */
LINKLIST LinkList_Creat(void)
{
	LNODE *headPtr;  //头指针 
	LNODE *headNode; //头结点 
	
	headPtr=headNode=(LINKLIST)malloc(sizeof(LNODE));
	if(headPtr == NULL || headNode == NULL){
		printf("创建单链表失败!!!\n");
		return;
	}
	
	headNode->ptr=NULL;
	headNode->data=0; 
	
	//printf("headPtr = %p\n",headPtr);
	//printf("headNode = %p\n",headNode);
	//printf("headNode->ptr = %p\n",headNode->ptr);
	//printf("headNode->data = %d\n",headNode->data);
	
	return headNode;
	
}
/**
 *@Function: 单链表的元素--插入 
 *@params  : 
 *@return  :
 *@note    : 在第pos个位置插入元素,首先需要求出pos的直接前驱;
 *           元素的插入分为在尾部直接插入,在中间插入 
 */
LINKLIST LinkList_Insert(LINKLIST linklist,int pos,ElementType data)
{
	LNODE *temPtr;
	LNODE *s;
	int i=0;
	temPtr = linklist;
	
	if(pos > (temPtr->data) + 1){ 											    //插入位置非法
		printf("插入位置非法!!!\n"); 
		return;
	}
	
	for(i=0;i<pos-1;i++){                                                       //获取第pos个位置的直接前驱结点 
		temPtr=temPtr->ptr;
	} 
	//printf("temPtr=%p\n",temPtr);
	if(pos == (linklist->data + 1)){                                            //在最后一个结点或者第一结点插入数据,实际相当于尾部直接插入元素 
		s=(LINKLIST)malloc(sizeof(LNODE));
		temPtr->ptr=s;
		s->data = data;
		linklist->data++;                                                       //长度+1,长度信息保存在头结点的数据域 
		s->ptr=NULL;                                                            //没有直接后继,所以最后一个节点的指针域为空 
		//printf("if-malloc_addr=%p\n",s);
	} 
	else{                                                                       //说明有直接后继元素 
		s=(LINKLIST)malloc(sizeof(LNODE));
		s->ptr=temPtr->ptr;
		temPtr->ptr=s;
		s->data=data;
		linklist->data++;                                                       //长度+1,长度信息保存在头结点的数据域  
		//printf("el-malloc_addr=%p\n",s);
	}
	return linklist;	
}

/**
 *@Function: 单链表的元素--删除 
 *@params  : 
 *@return  :
 *@note    : 在第pos个位置删除元素,首先需要求出pos的直接前驱;
 *           元素的删除分为在尾部直接删除,在中间删除 
 */
bool LinkList_Delete(LINKLIST linklist,int pos)
{
	LNODE *tmp; 
	LNODE *tmp1=NULL;
	int i;
	tmp=linklist;
	
	if(pos > linklist->data){
		printf("非法删除!!!\n");
		return;
	}
	for(i=0;i<pos-1;i++){                                                       //获取第pos个位置的直接前驱结点 
		tmp=tmp->ptr;
	} 
	if(pos == linklist->data){
		free(tmp->ptr);
		tmp->ptr=NULL;
		linklist->data--;
	}
	else{
		tmp1=tmp->ptr;
		tmp->ptr=tmp1->ptr;
		linklist->data--;
		free(tmp1);
	}
	return true;
}


/**
 *@Function: 单链表的元素--查询 
 *@params  : 
 *@return  :
 *@note    : 
 *           
 */
ElementType LinkList_Query(LINKLIST linklist,int pos)
{
	LNODE *tmp;
	int i;
	tmp=linklist->ptr;
	
	if(pos > linklist->data){
		printf("非法查询!!!\n"); 
		return;
	}
	
	for(i=1;i<pos;i++){
		tmp=tmp->ptr;	
	}
	printf("--query-data=%d\n",tmp->data);
	printf("--data-addre=%p\n\n",tmp);
	return tmp->data;
	
	 
} 

 
/**
 *@Function: 遍历输出链表元素 
 *@params  : 
 *@return  :
 *@note    : 
 */
void printAllDatas(LINKLIST linklist)
{
	int i=0;
	LNODE *tmep;
	tmep=linklist->ptr;
	printf("/*--------------------------*/\n");
	for(i=0;i<linklist->data;i++){
		
		printf("data[%d]=%d\n",i,tmep->data);
		printf("addr[%d]=%p\n",i,tmep);
		tmep=tmep->ptr;
		printf("/*--------------------------*/\n");
	}
	printf("length=%d\n",linklist->data);	
}

/**
 *@Function: 算法测试 
 *@params  : 
 *@return  :
 *@note    : 
 */
void LinkList_Print2Test(void)
{
	int i;
	LINKLIST linklist;
	linklist=LinkList_Creat(); 
	LinkList_Insert(linklist,1,23);
	LinkList_Insert(linklist,2,25);
	LinkList_Insert(linklist,3,27);
	LinkList_Insert(linklist,2,229);
		LinkList_Insert(linklist,1,213);
		LinkList_Insert(linklist,2,215);
		LinkList_Insert(linklist,3,217);
		LinkList_Insert(linklist,2,219);
	
	for(i=1;i<linklist->data+1;i++){
		LinkList_Query(linklist,i);
	}	
	LinkList_Delete(linklist,8);
	LinkList_Delete(linklist,9);
	LinkList_Delete(linklist,1);
	
	printAllDatas(linklist);
}




 

分享到:
评论

相关推荐

    数据结构-C语言实现单链表-数据结构学习

    C语言实现的数据结构中的单链表 包含源码(.c文件),linux环境下编译生成的可执行文件,头文件 用于C语言以及数据结构的学习,熟练对链表边界的判定 实现了以下功能: 创建单链表 向顺序表中插入元素(头插法,尾插...

    单链表(数据结构C语言版)

    单链表(数据结构C语言版) 链表的创建,插入,删除,排序等操作并建立有菜单,可以选择操作

    C语言-数据结构-单链表完整程序

    本项目聚焦于C语言实现的单链表,这是一种基本且重要的线性数据结构。 单链表是由一系列节点构成的,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下一个节点的地址。链表的第一个...

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

    单链表作为数据结构的基础部分,具有简单灵活的特点,常用于实现动态数据集合。本节将深入探讨单链表的算法,包括其定义、基本操作以及在实际问题中的应用。 单链表是由一系列节点组成的数据结构,每个节点包含两...

    C语言-C---数据结构学习攻略.zip

    学习这些C语言数据结构的同时,还需要了解相关的算法,以及如何通过C语言实现这些算法。实践是提高编程技能的关键,所以建议读者不仅要理解概念,还要动手编写代码,通过实际操作来加深理解。同时,阅读和分析他人...

    数据结构c语言版-单链表的操作程序代码

    在这个“数据结构C语言版-单链表的操作程序代码”中,我们将深入探讨单链表的概念、操作以及C语言实现。 单链表是一种线性数据结构,其中每个元素(节点)包含两部分:数据部分和指针部分。数据部分存储实际的信息...

    数据结构C语言-单链表操作实验

    数据结构C语言版,单链表操作的菜单式实验,包括单链表的初始化、创建、求表长、插入删除元素、销毁和清空单链表等操作,具体操作根据屏幕提示进行。

    数据结构---线性表之单链表(C语言)

    单链表是数据结构中的一种基础类型,尤其在C语言编程中经常被使用。它是一种线性的、非连续的数据组织形式,每个元素称为节点,每个节点包含数据和一个指向下一个节点的指针。本篇文章将深入探讨单链表的创建、插入...

    数据结构-单链表(C语言)

    数据结构-单链表。 根据数据结构书上提供的算法,自己实践将单链表的插入,查找,删除等操作编写成系统。可以输入进行相关操作。

    数据结构单链表实验(C语言)

    单链表的接本操作,有在单链表中插入,删除数据的功能,以及...1.单链表的数据结构的建立实现。 2.单链表元素结点插入操作实现。 3.单链表元素结点删除操作实现。 4.实现单链表的合并。 5.实现一元多项式的相加。

    数据结构C语言版-线性表的单链表存储结构表示和实现优质资料.doc

    数据结构C语言版-线性表的单链表存储结构表示和实现优质资料.doc 知识点摘要: 1. 数据结构的基本概念:数据结构是计算机科学中的一种基本概念,指的是数据的组织和存储方式。 2. 线性表的概念:线性表是一种基本...

    数据结构单链表c语言实现

    数据结构的单链表C语言版完整实现,本人知识初学者实力浅浅,可能对于大佬来说只是rubb**。如果同样是初学者的话,可能对于你或许有些用处。如果帮助到你很开心,如果你觉得有些low希望可以提出宝贵的建议 !!

    中国科大【少年班】C语言--数据结构PPT-全

    中国科学技术大学(中国科大)的少年班课程以其严谨性和深度著称,其C语言数据结构PPT为我们提供了一个深入学习这门重要课程的宝贵资源。 在C语言中,数据结构是通过结构体和指针来实现的,它涉及到数组、链表、栈...

    单链表数据结构,包括单链表定义与特点、单链表的C语言描述、单链表基本形态、单链表基本操作实现、单链表的运用

    逆序数据建立链表pta---- 目录 单链表定义与特点 单链表的C语言描述 单链表基本形态 单链表基本操作实现 单链表的运用

    c语言-数据结构-列表源码

    本主题聚焦于"C语言-数据结构-列表源码",这涉及到C语言实现不同类型的列表数据结构,包括顺序列表(seqlist)、双向列表(dlist)、单链表(slist)和循环链表(clist)。这些数据结构是计算机科学中的基础,理解和...

    数据结构 单链表的生成算法 c语言实现

    单链表是一种基本的数据结构,用于存储一系列有序元素。本篇将详细探讨单链表的生成算法及其C语言实现。 单链表是由一系列节点构成的,每个节点包含两部分:数据域,用于存储数据;指针域,指向下一个节点的地址。...

    数据结构C语言版-线性表的单链表存储结构表示和实现.doc

    "数据结构C语言版-线性表的单链表存储结构表示和实现" 本文档介绍了线性表的单链表存储结构表示和实现,使用C语言编写,提供了多种操作函数,包括初始化、销毁、清空、判断空表、获取元素、获取元素位序等。 数据...

    数据结构C语言版-单链表源代码.doc

    单链表是一种基础的数据结构,它由一系列的节点组成,每个节点都包含了数据和指向下一个节点的指针。在这里,我们将使用C语言来实现单链表的各种操作,包括插入、删除、查找和显示等。 数据结构定义 在单链表源...

    职工信息管理系统-单链表实现-C语言源程序.pdf

    该程序是一个使用C语言实现的职工信息管理系统,使用单链表作为数据结构来存储和管理职工信息。系统提供了职工信息的录入、修改、查找和删除等功能。 结构体employee 在该系统中,定义了一个结构体employee,用于...

    c语言-数据结构

    在学习C语言数据结构时,除了理解这些概念,还需要掌握相应的算法,如排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)和查找算法(顺序查找、二分查找等)。此外,还需要了解如何在C语言中动态分配...

Global site tag (gtag.js) - Google Analytics