一步一步写算法(检查表)

一步一步写算法(检查表)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

【 声明:版权所有所有。欢迎转载,不用于商业用途。  联系我们:feixiaoxing @163.com】

    有时。在数据存储是不连续。所以这一次,我们需要在数据结构添加属性,这个属性会记录以下一个数据的地址。有了这个地址之后,全部的数据就像一条链子一样串起来了,那么这个地址属性就起到了穿线连结的作用。

    相比較普通的线性结构,链表结构的优势是什么呢?我们能够总结一下:

    (1)单个节点创建很方便,普通的线性内存通常在创建的时候就须要设定数据的大小

    (2)节点的删除很方便,不须要像线性结构那样移动剩下的数据

    (3)节点的訪问方便,能够通过循环或者递归的方法訪问到随意数据。可是平均的訪问效率低于线性表

    那么在实际应用中,链表是怎么设计的呢?我们能够以int数据类型作为基础,设计一个简单的int链表:

    (1)设计链表的数据结构

typedef struct _LINK_NODE
{
    int data;
	struct _LINK_NODE* next;
}LINK_NODE;

    
(2)创建链表

LINK_NODE* alloca_node(int value)
{
    LINK_NODE* pLinkNode = NULL;
	pLinkNode = (LINK_NODE*)malloc(sizeof(LINK_NODE));
	
	pLinkNode->data = value;
	pLinkNode->next = NULL;
	return pLinkNode;
}

    (3)删除链表

void delete_node(LINK_NODE** pNode)
{
    LINK_NODE** pNext;
    if(NULL == pNode || NULL == *pNode)
	    return ;
		
	pNext = &(*pNode)->next;
	free(*pNode);
	delete_node(pNext);	
}

    
(4)链表插入数据

STATUS _add_data(LINK_NODE** pNode, LINK_NODE* pDataNode)
{
    if(NULL == *pNode){
	    *pNode = pDataNode;
		return TRUE;
	}
	
	return _add_data(&(*pNode)->next, pDataNode);
}

STATUS add_data(const LINK_NODE** pNode, int value)
{
    LINK_NODE* pDataNode;
    if(NULL == *pNode)
	    return FALSE;
		
	pDataNode = alloca_node(value);
	assert(NULL != pDataNode);
	return _add_data((LINK_NODE**)pNode, pDataNode);
}

    
(5)删除数据

STATUS _delete_data(LINK_NODE** pNode, int value)
{
    LINK_NODE* pLinkNode;
    if(NULL == (*pNode)->next)
	    return FALSE;
	
	pLinkNode = (*pNode)->next;
	if(value == pLinkNode->data){
	    (*pNode)->next = pLinkNode->next;
		free(pLinkNode);
		return TRUE;
	}else{
	    return _delete_data(&(*pNode)->next, value);
	}
}

STATUS delete_data(LINK_NODE** pNode, int value)
{
    LINK_NODE* pLinkNode;
    if(NULL == pNode || NULL == *pNode)
	    return FALSE;

    if(value == (*pNode)->data){
	    pLinkNode = *pNode;
		*pNode = pLinkNode->next;
		free(pLinkNode);
		return TRUE;
	}		
	
	return _delete_data(pNode, value);
}

    
(6)查找数据

LINK_NODE* find_data(const LINK_NODE* pLinkNode, int value)
{
    if(NULL == pLinkNode)
	    return NULL;
	
	if(value == pLinkNode->data)
	    return (LINK_NODE*)pLinkNode;
	
	return find_data(pLinkNode->next, value);
}

    
(7)打印数据

void print_node(const LINK_NODE* pLinkNode)
{
    if(pLinkNode){
	    printf("%d\n", pLinkNode->data);
		print_node(pLinkNode->next);
	}
}

  
 
(8)统计数据

int count_node(const LINK_NODE* pLinkNode)
{
    if(NULL == pLinkNode)
	    return 0;
		
	return 1 + count_node(pLinkNode->next);
}

【拖车: 下一步博客介绍双向链表】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117813.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月30日 下午10:00
下一篇 2021年12月30日 下午11:00


相关推荐

  • html5 页面刷新的代码,js刷新当前页面的代码

    html5 页面刷新的代码,js刷新当前页面的代码在写 JavaScript 代码时 用到 JS 来刷新当前页面的方法有几种 比如最常用的 reload location 等 本文整理了 js 刷新页面的几种方法 希望你有所收获 reload 方法 该方法强迫浏览器刷新当前页面 语法 location reload bForceGet 参数 bForceGet 可选参数 默认为 false 从客户端缓存里取当前页 true 则以 G

    2026年3月16日
    1
  • linux history命令常用方法

    linux history命令常用方法c清空内存中命令历史-d#删除指定的历史命令,比如history-d100,就是删除第100个命令历史history+nn代表行例如history500查看最近500行命令历史记录

    2022年7月16日
    21
  • 802.15.4中文版

    802.15.4中文版15 4 部分 用于低速无线个域网 WPANs 的无线媒体接入控制 MAC 和物理层 PHY 规范 IEEEStd802 15 4 2006 2003 的修订版 介绍 nbsp nbsp nbsp nbsp nbsp 本标准定义在个域网 PAN 中通过无线通信进行设备互联和协议 标准采用 CSMA CA 的媒体接入机制 并且支持星型以及点到点的拓扑结构 采用基于竞争的媒体接入方式 但是采用可选的超帧结构 PAN 协调器可

    2026年2月14日
    3
  • 【Android TV 开发】–>Leanback 中的 HorizontalGridView

    【Android TV 开发】–>Leanback 中的 HorizontalGridViewLeanBack 是 Google 官方推出的 TV 端的功能库 里面包含了很多在 TVAndroid 端开发常用的控件 本文重点介绍其对 RecyclerView 适配 TV 端做的封装 HorizontalGr

    2026年3月18日
    1
  • 为什么当程序员?来听听漂亮国程序员的理由

    为什么当程序员?来听听漂亮国程序员的理由看看在国外当程序员的理由,与我们国内有什么不同!

    2022年5月15日
    37
  • 正余弦函数及其反函数导数推导

    正余弦函数及其反函数导数推导正余弦函数及其反函数导数推导背景三角函数的求导涉及到重要极限 limx 0sinxx lim x to0 frac sinx x 的使用 其反三角函数涉及复合函数求导 此文主要是对这两点知识的应用 三角函数求导 sinxsinx sinx limdx 0sin x dx sin x dx sinx lim dx to0 frac sin x dx sin

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号