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) 循环顺序表实现队列 ...
随机推荐
- 划分树 静态第k大
划分树是保存了快速排序的过程的树,可以用来求静态第k小的数 如果,划分树可以看做是线段树,它的左孩子保存了mid-L+1 个 小于等于 a[mid] 的数字, 右孩子保存了 R-mid个大于等于a[ ...
- 【C语言的日常实践(十二)】命令行参数
C计划main函数有两个参数.文章1一个通常被称为argc,它代表的命令行参数的个数. 第2个通常称为argv.它指向一组參数值. 指针数组:这个数组的每一个元素都是一个字符指针,数组的末尾是一个NU ...
- paip.关于动画效果的原则 html js 框架总结
paip.关于动画效果的原则 html js 框架总结 1. 动画框架的来源:flex,jqueryui 3 2. 特效的分类 3 2.1. Property effects 动态改变一个或多个目标对 ...
- AndroidUI组件之ListView小技巧
android:fadingEdge="none"//出去黑影 android:listSelector="@android:color/transparent&quo ...
- Perl中的单行凝视和多行凝视
同其它大多数编程语言一样.Perl中的单行凝视也是#开头.比如: #print "Hello,World!"; 但多行凝视.不同的语言有不同的凝视方式,比方说: Java,C/C+ ...
- 【原创】leetCodeOj --- Sort List 解题报告
今日leetcode链表题全制霸 原题地址: https://oj.leetcode.com/problems/sort-list/ 题目内容: Sort List Sort a linked lis ...
- [Django] Base class in the model layer
In the model layer, the Model class is the base class while the ModelBase class is metaclass.
- JSP中的include有哪些?有什么差别?
JSP中的include有哪些?有什么差别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include ...
- air mobile andriod ios 页面加载控件
通过最近的研究flex 书写android .ios申请书,我们遇到了一个问题加载页面,我们用flex sdk 12,air 15 无级似android ListView寻呼模块.所以,我和我的同事们 ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...