C++实现链表
最后几天留在Intel,没什么事情,都是开开会。趁着闲功夫,把数据结构复习一下,写了一个list。时间仓促,有些地方考虑的可能没那么到位,望高手们指点。
#include <iostream>
using namespace std;
class listNode
{
public:
listNode()
{
next = NULL;
}
int data;
listNode *next;
}; class mylist
{
private:
unsigned int listlength;
listNode *headNode;
public:
mylist();
listNode *getHead();
unsigned int length();
bool isEmpty();
void create(int data);//insert from the head
void traverse();//traverse all nodes
void insert(int data, int i);//insert data in location i
void dele(int data);//delete data
listNode *find(int data);//find data;
}; mylist::mylist()
{
listlength = 0;
headNode = NULL;
} listNode *mylist::getHead()
{
return headNode;
} unsigned int mylist::length()
{
return listlength;
} bool mylist::isEmpty()
{
return (headNode == NULL);
} void mylist::create(int data)
{
listNode *tempNode;
tempNode = new listNode();
tempNode->data = data;
if(headNode == NULL)
headNode = tempNode;
else
{
tempNode->next = headNode;
headNode = tempNode;
}
listlength++;
} void mylist::traverse()
{
listNode *iter;
iter = headNode;
if(iter == NULL)
cout<<"list is empty"<<endl;
else
{
while(iter != NULL)
{
cout<<iter->data<<endl;
iter = iter->next;
}
}
} void mylist::insert(int data, int i)
{
listNode *p, *index;
p = new listNode();
index = headNode;
if(i < 0 || i > listlength)
cout<<"illegal location to insert"<<endl;
else
{
p->data = data;
for(int j = 0; j < i; j++)
{
index = index->next;
}
p->next = index->next;
index->next = p;
listlength++;
}
} void mylist::dele(int data)
{
listNode *iter, *iterNext;
iter = headNode;
iterNext = headNode->next;
if(iter->data == data)
{
headNode = iterNext;
delete iter;
listlength--;
return;
}
while(iterNext->data != data && iterNext != NULL)
{
iter = iter->next;
iterNext = iterNext->next;
}
iter->next = iterNext->next;
delete iterNext;
listlength--;
} listNode *mylist::find(int data)
{
listNode *iter;
iter = headNode;
while(iter->data != data && iter != NULL)
iter = iter->next;
return iter;
}
/*test for my list*/
int main()
{
mylist slist;
if(slist.isEmpty())
cout<<"list is empty"<<endl;
for(int i = 0; i < 5; i++)
{
slist.create(i);
}
slist.insert(5, 3);
slist.dele(5);
cout<<"list has "<<slist.length()<<" nodes"<<endl;
slist.traverse();
cout<<"find 3 in my list:"<<slist.find(3)->data<<endl;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
C++实现链表的更多相关文章
- Redis链表实现
链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 排序算法----基数排序(RadixSort(L))单链表智能版本
转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...
- 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结
防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...
- C语言之链表list
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...
- 单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作. 链表结构定义 定义单链表 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 用JavaScript来实现链表LinkedList
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...
- 数据结构:队列 链表,顺序表和循环顺序表实现(python版)
链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...
随机推荐
- Codeforces Round#310 div2
C题:这题说的是套娃,如果做题的时候知道是套娃,那就好理解多了 规则1:套娃A可以放到套娃B里面,当且仅当套娃B没有放在其他套娃里面 规则2:套娃A放在套娃B里面,且套娃B没有放在其他套娃里面,那么可 ...
- 参数化测试--sheet表的应用
自动化测试对录制和编辑好的测试步骤进行回放,这种是线性的自动化测试方式,其缺点是明显的,就是其测试覆盖面比较低.测试回放的只是录制时做出的界面操作,以及输入的测试数据,或者是脚本编辑时指定的界面操作和 ...
- python学习笔记之九:模块和包
Python的标准安装包括一组模块,称为标准库.这里介绍模块的工作方式,学习如何使用它们. 一. 模块 1.1 用import从外部模块获取函数并为自己的程序所用: >>> from ...
- flex4 amcharts 删除水印
package com.twobowl.component.manualTopo { import com.amcharts.AmPieChart; import com.amcharts.chart ...
- oracle分区表运行计划
分区表有非常多优点,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果. 当然表设计得不好也会适得其反.效果比普通表跟糟糕. 为了更好的使用分区表,这里看一下分区表的运 ...
- [转]C#自定义开关按钮控件--附带第一个私活项目截图
原文地址:http://www.cnblogs.com/feiyangqingyun/archive/2013/06/15/3137597.html 进入智能手机时代以来,各种各样的APP大行其道,手 ...
- Windows Phone开发(24):启动器与选择器之发送短信
原文:Windows Phone开发(24):启动器与选择器之发送短信 本节我们通过一个简单的发送短信示例来演示一下如果配合使用PhoneNumberChooserTask和SmsComposeTas ...
- android 读,写图片sd网卡资源
<pre name="code" class="html"><!--<span style="font-family: Ari ...
- UML相关工具一览
http://www.cnblogs.com/chehaoj/p/3478003.html TopCoder UML Tool 1.2.6 TopCoder, Inc http://www.topco ...
- T-SQL基础(5) - 表表达式
1.派生表(derived table)select YEAR(orderdate) as orderyear, COUNT(distinct custid) as numcustsfrom Sale ...