C语言链表操作实践:增删查改全面解析

版权申诉
0 下载量 138 浏览量 更新于2024-10-09 收藏 1KB RAR 举报
资源摘要信息:"CList.rar_CList_C语言" 知识点一:C语言链表基础 链表是一种常见的基础数据结构,其元素的物理位置不必连续,而是通过每个元素中的指针域把一个个节点连接起来。在C语言中,链表通常通过结构体(struct)来定义其节点,每个节点包含至少两个域:一个用于存储数据信息的数据域和一个用于存储指向下一个节点地址的指针域。 知识点二:C语言链表操作 在描述中提到的链表的增、删、查、改功能,指的是链表操作的四个基本动作: 1. 增(添加节点) - 在链表的头部添加节点:创建新节点,将其next指针指向原链表的头节点,然后更新链表的头指针指向新节点。 - 在链表的尾部添加节点:创建新节点,遍历整个链表找到尾部,将其next指针指向新节点,如果链表为空则直接让头指针指向新节点。 - 在链表的中间添加节点:创建新节点,通过遍历找到指定位置的前一个节点,将前一个节点的next指向新节点,然后将新节点的next指向原来位置的节点。 2. 删(删除节点) - 删除链表头部节点:直接将头指针指向原头节点的下一个节点。 - 删除链表中间或尾部节点:需要找到该节点的前一个节点,将前一个节点的next指向目标节点的下一个节点。 3. 查(查找节点) - 通过遍历链表,比较节点的数据域,来查找是否存在指定数据的节点,或者找到对应位置的节点。 4. 改(修改节点数据) - 查找到具体的节点之后,直接修改该节点的数据域即可。 知识点三:C语言链表结构定义 在C语言实现链表时,首先需要定义节点结构体,通常包含两个部分:存储数据的数据域和存储下一个节点地址的指针域。例如: ```c struct Node { int data; // 数据域,存储整数类型数据 struct Node *next; // 指针域,指向下一个节点 }; ``` 知识点四:C语言链表的优缺点 链表的优点包括: - 动态数组:链表是一种动态数据结构,可以在运行时根据需要增删节点。 - 内存利用:链表能够更好地利用内存空间,因为它不依赖于连续的存储空间。 - 插入和删除效率高:在链表中插入和删除节点不需要移动其他元素。 链表的缺点包括: - 访问速度慢:因为链表是通过指针链接的,不支持随机访问,访问某个元素需要从头开始遍历。 - 占用空间多:每个节点除了存储数据外,还需要额外空间存储指针。 知识点五:C语言链表应用实例 在实际编程中,链表可以应用在很多场景,例如实现简单的数据记录管理、表达式求值、快速排序算法中的链表版本等。链表的使用让数据的管理变得灵活,尤其在处理不确定数量的数据时显示出其独特的优越性。 知识点六:CList.txt文件 由于给定文件信息中只提供了压缩包名称和压缩包内的一个文件名,没有提供文件内容,所以无法直接分析CList.txt文件内容。但根据文件名推测,该文档可能包含C语言链表操作的代码实现、示例代码、使用说明或相关讲解。这个文件是学习和了解如何在C语言中使用链表的一个重要资源。

import pandas as pd import numpy as np from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.cluster import KMeans import os def dbscan(input_file): ## 纬度在前,经度在后 [latitude, longitude] columns = ['lat', 'lon'] in_df = pd.read_csv(input_file, sep=',', header=None, names=columns) # represent GPS points as (lat, lon) coords = in_df.as_matrix(columns=['lat', 'lon']) # earth's radius in km kms_per_radian = 6371.0086 # define epsilon as 0.5 kilometers, converted to radians for use by haversine # This uses the 'haversine' formula to calculate the great-circle distance between two points # that is, the shortest distance over the earth's surface # http://www.movable-type.co.uk/scripts/latlong.html epsilon = 0.5 / kms_per_radian # radians() Convert angles from degrees to radians db = DBSCAN(eps=epsilon, min_samples=15, algorithm='ball_tree', metric='haversine').fit(np.radians(coords)) cluster_labels = db.labels_ # get the number of clusters (ignore noisy samples which are given the label -1) num_clusters = len(set(cluster_labels) - set([-1])) print('Clustered ' + str(len(in_df)) + ' points to ' + str(num_clusters) + ' clusters') # turn the clusters in to a pandas series # clusters = pd.Series([coords[cluster_labels == n] for n in range(num_clusters)]) # print(clusters) kmeans = KMeans(n_clusters=1, n_init=1, max_iter=20, random_state=20) for n in range(num_clusters): # print('Cluster ', n, ' all samples:') one_cluster = coords[cluster_labels == n] # print(one_cluster[:1]) # clist = one_cluster.tolist() # print(clist[0]) kk = kmeans.fit(one_cluster) print(kk.cluster_centers_) def main(): path = './datas' filelist = os.listdir(path) for f in filelist: datafile = os.path.join(path, f) print(datafile) dbscan(datafile) if __name__ == '__main__': main()

2023-06-07 上传