最后几天留在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++实现链表的更多相关文章

  1. Redis链表实现

    链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...

  2. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  3. 排序算法----基数排序(RadixSort(L))单链表智能版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  4. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  5. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  6. C语言之链表list

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...

  7. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  8. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  9. 用JavaScript来实现链表LinkedList

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...

  10. 数据结构:队列 链表,顺序表和循环顺序表实现(python版)

    链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...

随机推荐

  1. linux下多进程的调试

    linux下多进程的调试:  (1)follow-fork-mode           set follow-fork-mode [parent | child] ---- fork之后选择调试父进 ...

  2. 第三章 AOP 编程选择

    Spring为我们开发者提供了多种AOP的编程方式.我们该如何选择呢? 如果项目采用的是JDK5.0以上版本,我们可以选择@AspectJ的方式.这是第一选择. http://blog.csdn.ne ...

  3. uva103(最长递增序列,dag上的最长路)

    题目的意思是给定k个盒子,每个盒子的维度有n dimension 问最多有多少个盒子能够依次嵌套 但是这个嵌套的规则有点特殊,两个盒子,D = (d1,d2,...dn) ,E = (e1,e2... ...

  4. iOS Dev (55) 获得本年度、月、日本和其他信息

    iOS Dev (55) 获得本年度.月.日本和其他信息 作者:大锐哥 博客:http://prevention.iteye.com - NSDate *now = [NSDate date]; NS ...

  5. 安装sunvirtualbox

    按照网友提供的方法安装sunvirtualbox,老提示:依赖关系不满足: libpython2.6 (>= 2.6) 后来用终端运行 sudo apt-get install virtualb ...

  6.  paip.android环境搭建与开发事例

    paip.android环境搭建与开发事例 好长时间没有玩AndROID了..以前常常做ANDROID的,今天决定在下载一个要做个时间设置器 作者Attilax ,  EMAIL:1466519819 ...

  7. poj 2586 Y2K Accounting Bug (贪心)

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8678   Accepted: 428 ...

  8. POJ 2738 Two Ends(记忆化)

    Description In the two-player game "Two Ends", an even number of cards is laid out in a ro ...

  9. nodeValue的兼容问题

    nodeValue获取Text或Comment元素的文本值. 在IE6.IE7.IE8中游览器会自作聪明的去掉前面的空白字符text,而其它现代游览器则会保留空白 <body> <s ...

  10. android下获取无线wif信号、ssid、MAC等操作类

    一个android下获取无线wif信号.ssid.MAC等操作的类. WifiAdmin.java package com.afu; import java.util.List; import and ...