`

Linux下用C++实现支持任何类型的TList链表

阅读更多

 以下为tlist.h文件代码

 /* 
* File:   tlist.h 
* Author: root 
* 
* Created on 2008年12月1日, 下午9:46 
*/ 
#ifndef _TLIST_H 
#define _TLIST_H 
#include <list> 
class TList { 
public: 
    TList(); 
    TList(const TList& orig); 
    virtual ~TList(); 
public: 
    bool    Add(void* data); 
    bool    Remove(void* data); 
    bool    IsEmpty(); 
    bool    Insert(int location,void* data); 
    void*   Front(); 
    void*   Last(); 
    void*   GetElem(int location); 
    int     Count(); 
    void    Free(); 
private: 
    std::list<void*> list; 
}; 
#endif /* _TLIST_H */ 

以下为实现tlist.cpp文件代码 
/* 
* File:   tlist.cpp 
* Author: root 
* 
* Created on 2008年12月1日, 下午9:46 
*/ 
#include "tlist.h" 
//------------------------------------------------------------ 
TList::TList() 
{ 

} 
//------------------------------------------------------------ 
TList::TList(const TList& orig) 
{ 
} 
//------------------------------------------------------------ 
//插入结点 
bool TList::Add(void* data) 
{ 
    list.push_back(data); 
    return true; 
} 
//------------------------------------------------------------ 
bool TList::Remove(void* data) 
{ 
    if(IsEmpty()) 
    { 
        return false; 
    } 
    else 
    { 
        list.remove(data); 
        return true; 
    } 
} 
//------------------------------------------------------------ 
bool TList::IsEmpty() 
{ 
    if(list.empty()) 
        return true; 
    else 
        false; 
} 
//------------------------------------------------------------ 
bool TList::Insert(int location, void* data) 
{ 
     
} 
//------------------------------------------------------------ 
void* TList::Front() 
{ 
    if(IsEmpty()) 
        return NULL; 
    else 
        return list.front(); 
} 
//------------------------------------------------------------ 
void* TList::Last() 
{ 
    if(IsEmpty()) 
        return NULL; 
    else 
        return list.back(); 
} 
//------------------------------------------------------------ 
void* TList::GetElem(int location) 
{ 
} 
//------------------------------------------------------------ 
int TList::Count() 
{ 
    int count = 0; 
    if(IsEmpty()) 
        count = 0; 
    else 
        count = list.size(); 
    return count; 
} 
//------------------------------------------------------------ 
void TList::Free() 
{ 
    list.clear(); 
} 
//------------------------------------------------------------ 
TList::~TList() 
{ 
    Free(); 
} 
//------------------------------------------------------------ 

以下为newmain.cpp测试代码 
/* 
* File:   newmain.cpp 
* Author: root 
* 
* Created on 2008年12月3日, 下午9:09 
*/ 
#include <stdlib.h> 
#include "tlist.h" 
#include <iostream> 
using namespace std; 
/* 
* 
*/ 
typedef struct 
{ 
    int a; 
    char item[1024]; 
}Data; 
int main(int argc, char** argv) { 
    TList* list = new TList(); 
    Data* data = new Data(); 
    data->a = 10; 
    strcpy(data->item,"abc"); 
    bool status = list->Add((void*)data); 
    if(status) 
        cout << "Add data successful" << endl; 
    else 
        cout << "Add data failure" << endl; 
    Data*d = new Data(); 
     d->a = 100; 
    strcpy(d->item,"ddddddddd"); 
    status = list->Add((void*)d); 
    if(status) 
        cout << "Add data successful" << endl; 
    else 
        cout << "Add data failure" << endl; 
    Data* data1; 
    data1 = (Data*) list->Front(); 
    cout << "a = " << data1->a << endl; 
    cout << "item = " << data->item << endl; 
     
    Data* d1; 
    d1 = (Data*) list->Last(); 
    cout << "a = " << d1->a << endl; 
    cout << "item = " << d1->item << endl; 
    list->Remove(data); 
    cout << "count = " << list->Count() << endl; 
    Data* dd; 
    dd = (Data*)list->Front(); 
    cout << "a = " << dd->a << endl; 
    cout << "item = " << dd->item << endl; 
    return (EXIT_SUCCESS); 
}  

 

分享到:
评论

相关推荐

    linux c++ 库函数手册 STL参考手册

    - **list**:双向链表,支持快速的插入和删除,但随机访问较慢。 - **set**:自平衡二叉查找树(红黑树),存储唯一元素并保持排序。 - **multiset**:与set类似,但允许存储重复元素。 - **map**:键值对的自...

    Linux内核list&hlist;解读

    安全地遍历链表,支持 RCU 读取锁,适用于并发环境下的链表遍历。 #### 4. hlist(hash list) ##### 4.1. hlist(hash list)结构 **4.1.1. 简述** `hlist` 是一种基于哈希表的链表结构,用于高效地存储和查找...

    C++之数据结构链表分类与实例分析[参照].pdf

    这些链表大多采用在 [include/linux/list.h] 实现的一个相当精彩的链表数据结构。 五、单链表的实现 单链表的节点类的声明如下: ```cpp template&lt;class T&gt; class Node { public: T data; // 数据 Node&lt;T&gt; *...

    C++primer 4th 笔记

    - `list` 和 `deque` 也是顺序容器,但它们在内部实现上不同于`vector`,`list`使用双向链表,`deque`使用分块数组。 - `bitset` 提供位操作,其中0是最低位,n-1是最高位,与常规整数表示相反。 5. **C++编译...

    C++builder6编程实例精讲

    - **2.1.1 TList类**:一种链表数据结构,用于存储和管理一组元素。 - **2.1.2 AnsiString类**:用于处理Ansi字符串,即非Unicode字符。 - **2.1.3 Set(集合)**:一种无序且不重复的数据集合。 - **2.1.4 ...

    C,C++头文件解释预览

    - **vector**, **list**, **deque**:C++标准模板库(STL)的一部分,提供了动态数组、双向链表和双端队列等数据结构。 - **algorithm**:包含了大量的算法,如排序、搜索、迭代等,提高了编程效率。 - **string**:...

    Hash_map 实现源码

    在C++中,这可能是通过`std::list, Value&gt;&gt;`或者自定义的节点结构来实现。 插入操作(Insertion)通常涉及计算键的哈希值,找到对应的桶,并将键值对添加到该桶的链表或树中。删除操作(Deletion)则需要找到特定...

    数据结构各种结构的stl实现

    `list&lt;T&gt;`是一个双向链表,支持快速的插入和删除操作。例如,创建一个包含整数的链表: ```cpp #include &lt;list&gt; std::list&lt;int&gt; intList; intList.push_back(1); intList.push_back(2); ``` 散列(Hash)在STL中...

    vc++ 开发实例源码包

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! 如题。详细见源码。 GMem 内存管理单元源码。GMem.cpp...

    STL的基本概念和常用容器

    STL是一种通用编程范式下的高效C++程序库,它被包含在C++标准程序库中。这一库集成了计算机科学领域内的许多基本数据结构和算法,通过高度抽象化的设计理念实现了良好的可扩展性和可复用性。 ##### 1.2 STL的历史 -...

    嵌入式C精华文章

    - `void *` 是一种通用指针类型,可以指向任何类型的对象。 - **重要性**: - 在函数参数列表中使用 `void` 表示函数不接受任何参数。 - `void *` 可用于实现函数模板,增加代码的灵活性和复用性。 - **示例**: ...

    MyQQ(DosQQ) 超小的精简QQ DEV-C++ 源码

    4. ccpaging建议改掉qqqun这个结构名,我打算下个版本把它改为qun_t,其它类似如 member_t, group_t, buddy_t。 5. 具备登录输入验证码功能,验证码图片保存在web/verify目录下。 6. 修正qqsocket里接收数据溢出。 ...

    (数据结构,算法)约瑟夫(Joseph)环问题实训报告(完整版,格式与毕业论文一样)

    本实训报告的目标是通过实现两种不同的数据结构——顺序表(SqList)和循环链表(LinkList),来解决约瑟夫问题。 **1.2 需求环境** 项目开发环境主要包括但不限于: - **操作系统**:Windows 或 Linux。 - **编程语言*...

    数据结构中的关于队列的实验

    - 使用**链表**:也可以使用单链表或双链表来实现,链表的优点在于插入和删除操作更为高效,不需要考虑数组扩容的问题。 3. **C++代码示例**: - 基于数组实现的简单队列类: ```cpp template &lt;typename T&gt; ...

    C#文档中文版(微软)

    5. **集合**:C#提供了丰富的集合类,如List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等,它们实现了各种数据结构,如数组、链表和哈希表。 6. **异常处理**:通过try-catch块,C#支持异常处理,允许程序在出现错误时优雅地...

    面试整理.md

    **`List&lt;T&gt;`的底层实现**: 1. **数组实现**:`List&lt;T&gt;`内部维护了一个动态数组`items`来存储元素。 2. **容量调整**:当添加新元素导致数组容量不足时,`List&lt;T&gt;`会自动扩展数组大小(通常为当前大小的1.5倍或2倍...

Global site tag (gtag.js) - Google Analytics