#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语言实现 #### 背景与问题描述 约瑟夫环(Josephus Problem)是一个经典的数学问题,最早由Flavius Josephus在公元前1世纪提出。该问题的基本形式是:N个人围成一个圈,从第一个人开始报数...
双链表是一种常见的数据结构,它在计算机科学中...通过阅读和运行这些代码,你将更好地理解双链表的C语言实现,并能够运用到自己的项目中。同时,博客链接提供了更多关于双链表实现的详细信息,建议参考以加深理解。
本主题聚焦于顺序链表(单链表)的C语言实现,包括正序创建、逆序创建、输出、删除、插入节点、求链表长度以及合并链表等操作。 1. **链表的基本概念**:链表由一系列节点组成,每个节点包含数据和指向下一个节点的...
本篇文章将深入探讨链表的概念,以及如何使用C语言来实现链表的两种主要存储方式:尾接法和头接法。 首先,让我们理解链表的基本概念。链表不同于数组,它不是一块连续的内存空间。相反,链表中的每个元素称为节点...
同质链表的C语言实现 ,方便大家参考
下面将详细讨论静态链表的实现及其在C语言中的应用。 首先,我们要明白静态链表的基本概念。静态链表并不像传统的链表那样,节点在运行时动态地分配和释放,而是通过数组来模拟链表的行为。每个节点在程序编译时就...
通过这样的C语言实现,我们可以灵活地处理动态数据集,比如存储和操作一组未知大小的整数。单向链表虽然不如数组访问速度快,但其动态性使得它在许多场景下成为更合适的选择。理解并能熟练运用链表的实现对于学习...
在C语言中实现哈希链表,需要理解哈希函数、链表结构以及如何将两者结合起来。这里我们将深入探讨哈希链表的概念、C语言中的实现方法以及其在项目中的应用。 哈希链表的核心在于哈希函数,它能够将输入(通常为字符...
C语言实现单链表
在C语言中,实现这个转换需要定义相应的数据结构,如`struct TreeNode`表示二元查找树节点,`struct DoublyListNode`表示双向链表节点。同时,需要编写二元查找树的中序遍历函数和转换函数。在转换函数中,使用递归...
在C语言中,静态链表的实现通常涉及到结构体的定义、内存的静态分配以及指针的操作。下面我们将深入探讨静态链表的原理、实现方法以及相关的C语言编程技巧。 ### 静态链表的原理 静态链表与传统的动态链表不同,它...
以上就是使用C语言实现从尾到头打印链表的方法,涉及到的主要知识点有链表的数据结构、链表节点的定义、链表反转的递归实现以及递归打印链表。这些概念和技能在数据结构与算法的学习中非常重要,对于理解和编写复杂...
1.创建链表 2.销毁链表 3.获取链表长度 4.清空链表 5.获取第pos个元素操作 6.插入元素到位置pos 7.删除位置pos处的元素 8.获取当前游标指向的数据元素; 9.将游标重置指向链表中的第一个数据元素; 10.将游标移动...
今天,我们将讲述如何使用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 typedef struct Node { int ...
本文将详细讲解使用C语言实现的单链表和循环链表。 单链表是一种线性数据结构,其中每个元素(称为节点)包含数据和一个指向下一个节点的引用(指针)。在C语言中,我们可以通过定义一个结构体来表示链表的节点: ...