main.cpp
1 #include "myDataBase.h"
2
3 int main()
4 {
5 int i =0;
6 myDataBase::GetInstance().createDataBaseList();
7 for(i=0;i<3 ; ++i)
8 {
9 string str;
10 cin >> str;
11 myDataBase::GetInstance().InsertListDataTail(i,str);
12 }
13 myDataBase::GetInstance().ShowDataBaseList();
14
15 return 0;
16 }

  myDataBase.h

 1 #ifndef _MYDATABASE_H
2 #define _MYDATABASE_H
3
4 #include <cstddef>//NULL 需要使用的头文件
5 #include <iostream>
6 #include <strings.h>
7 using namespace std;
8
9 //Data content
10 class dataContent{
11 public:
12 int key;
13 string name;
14 };
15
16 /*存储连表的class*/
17 class node{
18 public:
19 //数据
20 dataContent data ;
21 //int data;
22 //指向下一个数据区的指针
23 struct node *Next;
24 };
25
26 /*Data content
27 class dataContent{
28 int key;
29 string name;
30 };*/
31
32
33 /*对连表操作的class*/
34 class myDataBase{
35 public:
36 //构造函数
37 myDataBase();
38 //析构函数
39 ~myDataBase();
40 //创建链表
41 void createDataBaseList();
42 //show连表里面的数据
43 void ShowDataBaseList();
44 //数据的尾部插入操作
45 bool InsertListDataTail(int data,std::string & name);
46 //获取类的句柄
47 static myDataBase& GetInstance();
48
49 private:
50 //定义了头节点
51 node *pNode;
52 };
53
54 #endif

myDataBase.cpp


1 #include "myDataBase.h"
2
3 myDataBase::myDataBase()
4 {
5 pNode = NULL;
6 }
7
8 void myDataBase::createDataBaseList()
9 {
10 pNode = new node;
11
12 pNode->data.key=0;
13 pNode->Next = NULL;
14
15 return ;
16 }
17
18
19 bool myDataBase::InsertListDataTail(int data, std::string & name)
20 {
21 node * subNode = new node;
22 if(subNode == NULL)
23 {
24 cout<< "subNode create error!"<<endl;
25
26 return false;
27 }
28
29 subNode->data.key = data;
30 subNode->data.name = name;
31 subNode->Next = NULL;
32
33 node *temNode = pNode;
34
35 while(temNode->Next != NULL)
36 {
37 temNode = temNode->Next;
38 }
39
40 temNode->Next = subNode;
41
42 return true;
43 }
44
45
46 void myDataBase::ShowDataBaseList()
47 {
48 node * tempNode = pNode;
49 if(tempNode == NULL)
50 {
51 return ;
52 }
53
54 do{
55 if( (tempNode = tempNode->Next ) == NULL )
56 {
57 break;
58 }
59 else
60 {
61 cout<<"key: "<<tempNode->data.key<<"\t name :"<<tempNode->data.name<<endl;
62 }
63 }while(tempNode->Next);
64
65 return ;
66 }
67
68
69 static myDataBase *m_instance = NULL;
70
71 myDataBase &myDataBase::GetInstance()
72 {
73 if(m_instance == NULL)
74 {
75 m_instance = new myDataBase;
76 if(m_instance == NULL)
77 {
78 cout<< "create myDataBase class err!"<<endl;
79 exit(0);
80 }
81 }
82 return *m_instance;
83 }
1 运行结果显示
2 ****@****:~/桌面/myDataBaseList/myDataBaseList$ ./main
3 i
4 love
5 u
6 key: 0 name :i
7 key: 1 name :love
8 key: 2 name :u
9 zhou_jiang@zhoujiang:

C++实现链表---可直接运行通过的更多相关文章

  1. 深度剖析linux内核万能--双向链表,Hash链表模版

    我们都知道,链表是数据结构中用得最广泛的一种数据结构,对于数据结构,有顺序存储,数组就是一种.有链式存储,链表算一种.当然还有索引式的,散列式的,各种风格的说法,叫法层出不穷,但是万变不离其中,只要知 ...

  2. 图解Java数据结构之单链表

    本篇文章介绍数据结构中的单链表. 链表(Linked List)介绍 链表可分为三类: 单链表 双向链表 循环列表 下面具体分析三个链表的应用. 单链表 链表是有序的列表,它在内存中存储方式如下: 虽 ...

  3. [代码记录] C语言链表

    #开始 · 简单的创建链表 #代码 #include<conio.h> #include<stdio.h> #include<stdlib.h> struct St ...

  4. 【Weiss】【第03章】练习3.11:比较单链表递归与非递归查找元素

    [练习3.11] 编写查找一个单链表特定元素的程序.分别用递归和非递归实现,并比较它们的运行时间. 链表必须达到多大才能使得使用递归的程序崩溃? Answer: 实现都是比较容易的,但是实际上查找链表 ...

  5. Contiki-一个进程的例子

    进程调度器 进程调度器的作用是调用进程.进程调度器通过调用实现进程线程的函数来调用进程.Contiki中所有的进程被设计为响应传递到进程中的事件,或者相应进程请求的轮询.进程调度器在调度进程的时候会将 ...

  6. [HDU1017]Exact cover[DLX][Dancing Links详解][注释例程学习法]

    Dancing Links解决Exact Cover问题. 用到了循环双向十字链表. dfs. 论文一知半解地看了一遍,搜出一篇AC的源码,用注释的方法帮助理解. HIT ACM 感谢源码po主.链接 ...

  7. HashMap 底层算法分析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp72 Hash算法HashMap使用Hash算法,所以在解剖HashMap ...

  8. 理解channel 工作原理以及源码

    Go 的并发特性  goroutines: 独立执行每个任务,并可能并行执行 channels: 用于 goroutines 之间的通讯.同步 一个简单的事务处理的例子  对于下面这样的非并发的程序: ...

  9. 【Java集合系列五】HashMap解析

    2017-07-31 19:36:00 一.简介 1.HashMap作用及使用场景 HashMap利用数组+单向链表的方式,实现了key-value型数据的存储功能.HashMap的size永远是2^ ...

随机推荐

  1. Spring Cloud--尚硅谷2020最新版

    Spring Cloud 初识Spring Cloud与微服务 在传统的软件架构中,我们通常采用的是单体应用来构建一个系统,一个单体应用糅合了各种业务模块.起初在业务规模不是很大的情况下,对于单体应用 ...

  2. Linux两台服务器mysql数据库同步

    我们在做web系统部署的时候往往涉及到两台甚至多台数据库的备份,为了数据安全考虑(虽然说到底不过是一堆0 1,但是价值千金啊),所以我们还是乖乖做同步把! 1.准备两台Linux服务器(主.从) 2. ...

  3. 【原创】探索容器底层知识之Namespace

    一.先谈谈进程 在正式介绍Namespace之前,先介绍下进程,因为容器本质上是进程,但是在介绍进程之前,先理清下“程序”和“进程”的关系,这是IT从业人员在日常工作中经常碰到的两个词汇,举个通俗点的 ...

  4. webpack打包初始入门教程

    Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 从图中我们可以看出,Webpack 可以将多种静态资源 js.css ...

  5. Android开发之模拟器genymotion安装apk出现错误: Install_failed_invalid_URI

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. install failed invalid uri Android开发之模拟器ge ...

  6. Color a Tree & 排列

    Color a Tree 题目链接 好不可做?可以尝试一下DP贪心网络流.DP 似乎没法做,网络流也不太行,所以试一下贪心. 考虑全局中最大权值的那个点,如果它没父亲,那么一定会先选它:否则,选完它父 ...

  7. python中os.path下模块总结

    import os path =os.path.abspath("abc.text") # 返回绝对路径 print("path:",path) # path: ...

  8. Codeforces1250C Trip to Saint Petersburg 线段树

    题意 有个人要去圣彼得堡旅游,在圣彼得堡每天要花\(k\)块钱,然后在圣彼得堡有\(n\)个兼职工作\(l_i,r_i,p_i\),如果这个人在\(l_i\)到\(r_i\)这个时间段都在圣彼得堡,那 ...

  9. MD5截断比较验证 - 补充

    继上篇MD5截断比较验证文章之后有朋友提示除了数字以外,许多字母数字混合的明文在MD5加密之后也是可以达到同样效果的 同时在De1CTF中Web4题目中遇到了另一种较为特殊的截断比较验证,如图所示: ...

  10. 为什么要做一款ERP软件——开源软件诞生7

    技术之外的探讨--第7篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云:https://gitee.com/redragon/redra ...