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) 循环顺序表实现队列 ...
随机推荐
- MySQL与Oracle的语法区别详细对比 (转)
Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_c ...
- JAVA技术交流群
推荐:组[八方扑灭]:http://jq.qq.com/?_wv=1027&k=RFLXu0. QQ: 292352612 集团专注于技术.软件project.JAVA.c\c++.WEB. ...
- ROM签名脚本[原创]
下面的代码是bash脚本来的.需要保存为*.sh后序. # !/bin/bash #usage: signapk.sh [-hs] [zipfile-unsigned | update.zip] #A ...
- 9种CSS3 blend模式制作的鼠标滑过图片标题特效
这是一款使用CSS3 background-blend-mode制作的鼠标滑过图片标题特效.该图片标题特效在鼠标滑过一张图片的时候,图片的标题会对应的动画,而且图片会使用css blend模式渲染为很 ...
- 【ThinkingInC++】53、构造函数,析构函数,全局变量
/** * 图书:[ThinkingInC++] * 特征:构造函数,析构函数,全局变量 * 时刻:2014年9一个月17日本18:07:43 * 笔者:cutter_point */ #includ ...
- WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放、图片立体轮播、图片倒影立体滚动)效果实现
原文:WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放.图片立体轮播.图片倒影立体滚动)效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...
- hibernate的通配符比拼接sql到底好在哪?
Hibernate对于刚接触的人来说,通配符只是提供了另一种组合sql的方式.接触的久了,熟悉之后,才能够真正理解通配符在Hibernate中起到的作用 主要作用有两点: 1,避免sql注入 hibe ...
- Vc6.0打开该文件坠毁
这是一个微软bug,下面是用户给出的溶液: http://blog.163.com/wjatnx@yeah/blog/static/12758622820138110530322/ http://bl ...
- android横竖屏控制
代码中设置activity屏幕为全屏,并设置横竖屏状态 getwindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowM ...
- Poj3414广泛搜索
<span style="color:#330099;">/* D - D Time Limit:1000MS Memory Limit:65536KB 64bit I ...