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) 循环顺序表实现队列 ...
随机推荐
- Microsoft Build 2016
Microsoft Build 2016 Day 1 记录 去年今日:Microsoft Build 2015 汇总 今年的 Bulid 时间是 3.30-4.1,第一天的主角主要是 Window ...
- Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- spring问题排查-调低日志等级
问题描写叙述 1. 页面经过一次改动后,提交后页面出现400错误,可是后台并没有输出不论什么错误信息. 2. debug监听应页面对应的提交链接也没有不论什么反应(没有进入后台的controller方 ...
- C#操作注册表--DarrenF
步骤/方法 读取指定名称的注册表的值 private string GetRegistData(string name) { string registData; RegistryKey hkml = ...
- 动画(Animation) 它 (闪烁、左右摇摆、跷跷板等功效)
一侧到另一侧的影响: (这里显示的是并不那么顺利) 一.续播 (不知道取什么名字好,就是先播放动画A, 接着播放动画B) 有两种方式. 第一种.分别动画两个动画,A和B, 然后先播放动画A,设置A ...
- gradle(转)
一.声明dependency 在build.gradle文件编辑以下代码: apply plugin: 'java' repositories { mavenCentral() } depen ...
- 在CentOS下安装配置MySQL(转)
今天刚把项目做完,需要马上部署到新到的测试服务器上,于是乎,要在服务器上安装环境,由于好久在linux上部署了,手有些生,比较费劲装完,现在把重要步骤贴出,供自己以后参照.1.首先要看看有没有已经安装 ...
- 【BZOJ 1642】 [Usaco2007 Nov]Milking Time 挤奶时间
1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 590 Solved: 3 ...
- UVa 524 Prime Ring Problem(DFS , 回溯)
题意 把1到n这n个数以1为首位围成一圈 输出全部满足随意相邻两数之和均为素数的全部排列 直接枚举排列看是否符合肯定会超时的 n最大为16 利用回溯法 边生成边推断 就要快非常多了 #inc ...
- mod_python模块安装
两.mod_python 1.性能 使用mod_python的主要优势在于比传统CGI更高的性能. 一个測试,使用在Pentium 1.2GHz的机器上执行Red Hat Linux 7.3.使用4种 ...