`
hzizh
  • 浏览: 8566 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

链表的C语言实现

阅读更多

 

 

#include<stdio.h>

typedef struct Node{
	int id;
	int value;
	struct Node* next;
}Node;


Node* creatSingleList(int singleListLength);
Node* getSingleListTail(Node* singleListHead);
void printSingleList(Node* singleListHead);
void printNodeIDandValue(Node* singleListPointer);
int getSingleListLength(Node* singleListHead);
int insertNodeAfterId(Node* singleListHead, int id);
int insertNodeAfterValue(Node* singleListHead, int value);
int searchIdFromList(Node* singleListHead, int id);
int searchValueFromList(Node* singleListHead, int value);
int updateSingleListLength(Node* singleListHead, int* singleListLengthPointer);

int main(int argc, char** argv){

	Node* singleListHead;
	Node* singleListTail;
	int singleListLength;
	int i;

	singleListLength = 20;

	singleListHead = creatSingleList(singleListLength);
	
	printSingleList(singleListHead);

	singleListTail = getSingleListTail(singleListHead);

	printNodeIDandValue(singleListTail);

	singleListLength = getSingleListLength(singleListHead);
	printf("List length is : %d \n", singleListLength);
	updateSingleListLength(singleListHead, &singleListLength);
	printf("List length is : %d \n", singleListLength);

	i = searchIdFromList(singleListHead, 6);
	if(i != -1){
			printf("id position  is : %d \n", i);
	}

	i = searchValueFromList(singleListHead, 6);
	if(i != -1){
			printf("value position  is : %d \n", i);
	}

	return 0;
}

void printSingleList(Node* singleListHead){
	Node* singleListPointer;
	singleListPointer = singleListHead;
	while(singleListPointer != NULL){
		printf("Node ID: %d \tvalue: %d ",singleListPointer->id,singleListPointer->value);
		printf("\n");
		singleListPointer = singleListPointer->next;
	}
}

Node* creatSingleList(int singleListLength){
	Node* singleListHead;
	Node* singleListPointer;
	int i;

	singleListHead = (Node*)malloc(sizeof(Node));
	singleListPointer = singleListHead;
	srand(time(NULL));
	for(i=0;i<singleListLength-1;i++){
		singleListPointer->id = rand()%singleListLength;
		singleListPointer->value = 2*i;
		singleListPointer->next = (Node*)malloc(sizeof(Node));
		singleListPointer = singleListPointer->next;
	}
	singleListPointer->id = rand()%singleListLength;
	singleListPointer->value = 2*i;
	singleListPointer->next = NULL;

	return singleListHead;
}

Node* getSingleListTail(Node* singleListHead){

	Node* singleListTail;
	Node* singleListPointer;

	singleListPointer = singleListHead;
	while(singleListPointer->next != NULL){
		singleListPointer = singleListPointer->next;
	}
	singleListTail = singleListPointer;

	return singleListTail;
}

void printNodeIDandValue(Node* singleListPointer){

	printf("\n");
	printf("Node ID: %d\tvalue: %d",singleListPointer->id,singleListPointer->value);
	printf("\n");

}

int getSingleListLength(Node* singleListHead){

	int i;
	Node* singleListPointer;

	singleListPointer = singleListHead;
	i = 1;
	while(singleListPointer->next != NULL){
		i++;
		singleListPointer = singleListPointer->next;
	}		
	return i;
}

int insertNodeAfterId(Node* singleListHead, int id){


	return 0;
}

int insertNodeAfterValue(Node* singleListHead, int value){


	return 0;
}

int updateSingleListLength(Node* singleListHead, int* singleListLengthPointer){

	int length;
	length = getSingleListLength(singleListHead);
	*singleListLengthPointer = length;
	return 0;
}

int searchIdFromList(Node* singleListHead, int id){

	Node* singleListPointer;
	int position;

	position = 0;
	singleListPointer = singleListHead;
	while(singleListPointer->id != id){
		singleListPointer = singleListPointer->next;
		position++;
		if(position >= getSingleListLength(singleListHead)){
			fprintf(stderr,"Error! can not find id in the list!\n");
			position = -1;
			break;
		}
	}
	return position;	
}

int searchValueFromList(Node* singleListHead, int value){

	Node* singleListPointer;
	int position;

	position = 0;
	singleListPointer = singleListHead;
	while(singleListPointer->value != value){
		singleListPointer = singleListPointer->next;
		position++;
		if(position >= getSingleListLength(singleListHead)){
			fprintf(stderr,"Error! can not find id in the list!\n");
			position = -1;
			break;
		}
	}
	return position;	
	return 0;
}

 

分享到:
评论

相关推荐

    约瑟夫环单循环链表C语言实现

    ### 约瑟夫环单循环链表C语言实现 #### 背景与问题描述 约瑟夫环(Josephus Problem)是一个经典的数学问题,最早由Flavius Josephus在公元前1世纪提出。该问题的基本形式是:N个人围成一个圈,从第一个人开始报数...

    双链表C语言实现

    双链表是一种常见的数据结构,它在计算机科学中...通过阅读和运行这些代码,你将更好地理解双链表的C语言实现,并能够运用到自己的项目中。同时,博客链接提供了更多关于双链表实现的详细信息,建议参考以加深理解。

    顺序链表C语言实现代码

    本主题聚焦于顺序链表(单链表)的C语言实现,包括正序创建、逆序创建、输出、删除、插入节点、求链表长度以及合并链表等操作。 1. **链表的基本概念**:链表由一系列节点组成,每个节点包含数据和指向下一个节点的...

    数据结构链表C语言实现

    本篇文章将深入探讨链表的概念,以及如何使用C语言来实现链表的两种主要存储方式:尾接法和头接法。 首先,让我们理解链表的基本概念。链表不同于数组,它不是一块连续的内存空间。相反,链表中的每个元素称为节点...

    同质链表 C语言实现

    同质链表的C语言实现 ,方便大家参考

    静态链表C语言实现

    下面将详细讨论静态链表的实现及其在C语言中的应用。 首先,我们要明白静态链表的基本概念。静态链表并不像传统的链表那样,节点在运行时动态地分配和释放,而是通过数组来模拟链表的行为。每个节点在程序编译时就...

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

    通过这样的C语言实现,我们可以灵活地处理动态数据集,比如存储和操作一组未知大小的整数。单向链表虽然不如数组访问速度快,但其动态性使得它在许多场景下成为更合适的选择。理解并能熟练运用链表的实现对于学习...

    哈希链表c语言实现,可以直接用来做项目

    在C语言中实现哈希链表,需要理解哈希函数、链表结构以及如何将两者结合起来。这里我们将深入探讨哈希链表的概念、C语言中的实现方法以及其在项目中的应用。 哈希链表的核心在于哈希函数,它能够将输入(通常为字符...

    C语言实现单链表

    C语言实现单链表

    二元查找树转变为双向链表C语言实现

    在C语言中,实现这个转换需要定义相应的数据结构,如`struct TreeNode`表示二元查找树节点,`struct DoublyListNode`表示双向链表节点。同时,需要编写二元查找树的中序遍历函数和转换函数。在转换函数中,使用递归...

    静态链表的C语言实现

    在C语言中,静态链表的实现通常涉及到结构体的定义、内存的静态分配以及指针的操作。下面我们将深入探讨静态链表的原理、实现方法以及相关的C语言编程技巧。 ### 静态链表的原理 静态链表与传统的动态链表不同,它...

    从尾到头打印链表(C语言实现)

    以上就是使用C语言实现从尾到头打印链表的方法,涉及到的主要知识点有链表的数据结构、链表节点的定义、链表反转的递归实现以及递归打印链表。这些概念和技能在数据结构与算法的学习中非常重要,对于理解和编写复杂...

    循环链表C语言实现

    1.创建链表 2.销毁链表 3.获取链表长度 4.清空链表 5.获取第pos个元素操作 6.插入元素到位置pos 7.删除位置pos处的元素 8.获取当前游标指向的数据元素; 9.将游标重置指向链表中的第一个数据元素; 10.将游标移动...

    c语言双链表实现

    今天,我们将讲述如何使用c语言实现DOUBLE链表。 首先,我们需要定义DOUBLE链表的结构体: ```c typedef struct doublenode { int info; struct doublenode *llink; struct doublenode *rlink; } doublenode; ``...

    C语言链表实现学生信息管理

    根据提供的文件信息,我们可以分析出该程序主要实现了利用C语言中的链表技术来管理学生信息。下面将对各个部分的功能进行详细的解释。 ### 题目:C语言链表实现学生信息管理 #### 描述: 这是一个用C语言编写的...

    C语言实现多种链表快速排序

    链表是一种重要的数据结构,它在计算机科学...总之,C语言实现链表快速排序是一项挑战性的任务,它涉及到对链表操作和递归算法的深入理解。通过这个实践,可以提升对数据结构和算法的掌握,同时也有助于提高编程技巧。

    链表(C语言实现)

    链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态...以上是对"链表(C语言实现)"主题的详细阐述,涵盖了链表的基本概念、文件功能、操作流程、局限性以及C语言实现链表的关键点。

    c语言实现静态链表

    c语言实现的静态链表

    线性链表的C语言实现

    在本主题中,我们将深入探讨如何使用C语言实现线性链表。 首先,我们需要定义链表节点的结构体。在C语言中,一个链表节点通常包含两个部分:数据和指向下一个节点的指针。例如: ```c typedef struct Node { int ...

    c语言实现的单链表和循环链表

    本文将详细讲解使用C语言实现的单链表和循环链表。 单链表是一种线性数据结构,其中每个元素(称为节点)包含数据和一个指向下一个节点的引用(指针)。在C语言中,我们可以通过定义一个结构体来表示链表的节点: ...

Global site tag (gtag.js) - Google Analytics