一些简单的链表算法一

    链表是很重要的一种数据结构,又是一种看似简单但很难熟练掌握的东西,究其主要原因应该就是它与指针结合的太紧密了。为了让大家更好的学习,特将一些简单的算法罗列如下,大家一起探讨(用c写的而且是不带头结点的)

首先是链表的结构体:

typedef struct node
{
    int data;
 struct node* next;
}LIST;

1、往链表中压入元素

void Push(LIST **headRef,int newData)
{LIST *newNode = new(LIST);newNode->data = newData;newNode->next = *headRef;*headRef = newNode;
}

如果我们加入的顺序是1、2、3则得到的链表是{3、2、1}

我们简单构建一个链表{1、2、3}:

LIST* BuildOneTwoThree()
{LIST *head = 0;Push(&head,3);Push(&head,2);Push(&head,1);return head;
}

2、计算链表的长度

int Length(LIST*head)
{LIST *current = head;int length = 0;while(current != 0){length++;current = current->next;}return length;
}

3、计算给定一个元素计算在链表中出现的次数

int Count(LIST*head,int data_to_find)
{int count = 0;LIST *current = head;while(current != 0){if(current->data == data_to_find)count++;current = current->next;}return count;
}

4、 给定一个索引取出那个位置的值(索引是从0开始的)

int GetNth(LIST*head,int index)
{LIST *current = head;assert(head != 0);assert(index >= 0);for(index; index > 0; index--){current = current->next;}return current->data;
}

5、删除一个链表并释放所有内存将头指针指向NULL

void DeleteList(LIST**headRef)
{LIST*current = *headRef;LIST*next = 0;for(current ; current != 0;){next = current->next;delete(current);current = next;}*headRef = 0;
}

6、弹出第一个元素并删除第一个节点

int Pop(LIST**headRef)
{int data = 0;assert(*headRef != 0);LIST *current = *headRef;data = (*headRef)->data;*headRef = (*headRef)->next;delete(current);return data;}

7、在给定索引处插入元素

void InsertNth(LIST**headRef,int index,int newData)
{if(index == 0){Push(headRef,newData);}else{LIST*current = *headRef;for(index; index > 1; index--){assert(current != NULL);current = current->next;}assert(current != 0);Push(&current->next,newData);}
}

  上面的都是一些关于链表简单的算法,有些是参考斯坦福大学的讲义而来的,特此说明

 

 

 

 

转载于:https://www.cnblogs.com/self-control/archive/2012/12/27/2835347.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dubbo是如何实现可扩展的?(二)

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

李卓豪:网易数帆数据中台逻辑数据湖的实践

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

域名商2014年度报告:35互联域名总量增至33.4万

IDC评述网(idcps.com)01月21日报道:据域名统计机构WebHosting.info数据,截至2014年12月29日,35互联域名总量为334,559个,年净增长6,614个,与环比去年14,032个的年净增长量,涨幅约缩小…

RabbitMQ消息队列———安装(一)

一、RabbitMQ队列 不同进程间的通信,简称IPC。不同的进程间的通信,可以基于队列解决,将生产者和消费者进行解耦,中间的队列作为其桥梁。RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public…

App机型测试

1. 目前, Android APP开发完成后,通常需要在哪些机型上进行测试?  2. 目前, 开发Android APP时,需要考虑的分辨率有哪些?  这两个问题可以合起来回答的。  http://developer.android.com/about/dashb…

程序分析与优化 - 5 指针分析

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

linux 系统下配置java环境变量

liunx桌面版本系统下载地址:http://www.ubuntukylin.com/downloads/ 1、源码包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,我下载jdk-7u45-linux-x64.tar.gz…

ECShop目录

ECShop2.5.1_Beta upload 的目录┣ activity.php 活动列表┣ affiche.php 广告处理文件┣ affiliate.php 生成商品列表┣ article.php 文章内容┣ article_cat.php文章分类┣ auction.php 拍卖前台文件┣ brand.php 品牌列表┣ captcha.php 生成验证码┣ catalog.php 列出所以分…

HTML 编辑器

可以使用专业的 HTML 编辑器来编辑 HTML,几款常用的编辑器: Notepad:https://notepad-plus-plus.org/Sublime Text:http://www.sublimetext.com/HBuilder:http://www.dcloud.io/Notepad Notepad是 Windows操作系统下的…

程序员的十个等级

2019独角兽企业重金招聘Python工程师标准>>> 自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有…

.NET Core中JWT+Auth2.0实现SSO,附完整源码(.NET6)

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

11步提高代码质量和整体工作效率

作为专业程序员这些年来学到的能真正提高代码质量和整体工作效率的11件事情。 1. 永远不要复制代码 不 惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里。重复的代码会导致你的同事 在读…

CDZSC_2015寒假新人(1)——基础 i

Description “Point, point, life of student!” This is a ballad(歌谣)well known in colleges, and you must care about your score in this exam too. How many points can you get? Now, I told you the rules which are used in this course. T…

MySql触发器使用

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

用js添加网页标题时,在QQ里无效,标题栏空白

网页中的标题是从后台数据获取的,用document.title"我的标题",在微信里正常显示标题,但在扣扣里标题栏是空白的,在网上查到一段代码,粘贴上就好了。。。代码如下: var $body $(body);document.title “我的标题”;//兼容 在QQ中设置标题无效,标题不显示…

快速学习23种设计模式思想Design Patterns

1、factory(工厂)追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德 基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的F…

前端优化实例

页面:m.babytree.com/ask建议:1.降低网络负荷1.1缩小图片尺寸:100-1.png:由252*100 缩小到 127*50100-2.png:由272*100 缩小到 127*50Pregnancy.png: 由144*144 缩小到 72*721.2压缩以下资源图片名称:icon-mak.jpg,icon-weixin.jp…

Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

关于mysql

MariaDB[4] 的API和协议兼容MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和进度报告。这意味着,所有使用MySQL的连接器、库和应用程序也将会在MariaDB下工作。在此基础上,由于担心甲骨文MySQL的一个更加封闭的软件项目&am…

正则表达式验证

/判断输入内容是否为空 function IsNull(){ var str document.getElementById(str).value.trim(); if(str.length0){ alert(对不起,文本框不能为空或者为空格!);//请将“文本框”改成你需要验证的属性名称! } } //判断…