一个简单链表的C++实现

/*  LList.cpp
*   Author: Qiang Xiao
*   Time: 2015-07-12
*/

#include<iostream>
using namespace std;

class Node{
    public:
        int data;
    Node* ptr;
    Node(int elem= 0, Node* node= NULL){this->data= elem; this->ptr= NULL;}
};

class LList{
    private:
    Node* head;
    Node* tail;
    int length;
    public:
    LList();
    ~LList();
    bool append(Node*);
    bool insert(int, Node*);
    void print();
    int getLength(){return this->length;}
};

LList::LList(){
    Node* init= new Node(4);
    this->head= new Node();
    this->tail= new Node();
    this->head= init;
    this->tail= init;
    this->length= 0;
}

LList::~LList(){
    delete head;
    delete tail;
}

bool LList::insert(int pos, Node* node){
    int i= 0;
    Node* fence= new Node();
    fence= this->head;
    while(i< pos){
    fence= fence->ptr;
    i++;
    }
    node->ptr= fence->ptr;
    fence->ptr= node;
    this->length++;
    return true;
}

bool LList::append(Node* node){
    this->tail->ptr= node;
    this->tail= node;
    this->length++;
    return true;
}

void LList::print(){
    Node* p= this->head->ptr;
    while(p){
    cout<<p->data<<"\t";
    p= p->ptr;
    }
    cout<<endl;
    delete p;
}

int main(){
    cout<<"\n******************Begin Test**********************\n";
    Node* node1= new Node(1);
    Node* node2= new Node(2);
    Node* node3= new Node(3);
    Node* node4= new Node(4);
    LList* list= new LList();
    cout<<"\n******************Empty List**********************\n";
    list->print();
    list->append(node1);
    list->append(node2);
    list->append(node3);
    list->append(node4);
    cout<<"\n******************After Append********************\n";
    list->print();
    cout<<"\n\n";
    Node* node5= new Node(10);
    int pos= 2;
    list->insert(pos,node5);
    Node* node6= new Node(30);
    pos= 4;
    list->insert(pos,node6);

    cout<<"\n\n*****************After Insert*******************\n";
    list->print();
    return 0;
}

Console display:

[email protected]:~/C/DataStructure$ g++ LList.cpp -o LList.o
[email protected]-ubun:~/C/DataStructure$ ./LList.o 

******************Begin Test**********************

******************Empty List**********************

******************After Append********************
1    2    3    4    

*****************After Insert*******************
1    2    10    3    30    4
[email protected]-ubun:~/C/DataStructure$ 

写这个程序主要是练习一下链表的用法。代码中有许多需要改进的地方,敬请指正。

欢迎交流!

时间: 2024-10-13 05:51:38

一个简单链表的C++实现的相关文章

一个简单链表的C++实现(二)

/* LList.cpp * Author: Qiang Xiao * Time: 2015-07-12 */ #include<iostream> using namespace std; class Node{ public: int data; Node* ptr; Node(int elem= 0, Node* node= NULL){this->data= elem; this->ptr= node;} }; class LList{ private: Node* hea

利用C#的指针编写都一个简单链表

using System; namespace UnsafeTest { unsafe struct link { public int x; public link* next; } class Program { static unsafe void Main(string[] args) { int val; link* head = stackalloc link[sizeof(link)]; link*q =head; for(int i=0;i<=10;i++) { val = i+

go语言从零学起(三)--list循环删除元素(转载)

本篇系转载 在使用go的container/list的package时,你可能会无意间踩一个小坑,那就是list的循环删除元素. list删除元素,直观写下来的代码如下: package main import ( "container/list" "fmt" ) func main() { //初始化一个list l := list.New() l.PushBack(1) l.PushBack(2) l.PushBack(3) l.PushBack(4) fmt.

LeetCode笔记:206. Reverse Linked List

题目: Reverse a singly linked list. 大意: 反转一个简单链表. 思路: 题目的意思就是给出一个链表,本来是从头指向尾的,现在要你做成从尾指向头,并且返回原来的尾,现在的头.这个肯定是要用递归或者迭代来做.只要屡清楚过程,会比较绕.大体的流程就是,把下一个节点的next指向自己,一个个迭代.递归下去,最后返回最后的原来的尾节点 他山之石: 这里给出Discuss中最火的方法. 迭代实现: public ListNode reverseList(ListNode he

Unity3d 综合性能窍门

这篇文章是luzexi翻译的Unity官方文档:General_Performance_Tips 官方提示文档 图形性能优(http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html) 如何减少包大小(http://docs.unity3d.com/Documentation/Manual/ReducingFilesize.html) 角色动画(技巧比较零散) ( http://unity3d.c

结构体详解

1 概述 C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录. 声明一个结构休类型的一般形式如下: struct 结构体名 {成员列表}; 结构体名,用作结构体类型的标志,它又称 结构体标记,大括号内是该结构体中的各个成员,由它们组成一个结构体,对各成员都应进行类型声明如: 类型名 成员名; 也可以把 成员列表称为 域表,第一个成员也称为结构体中的一个域.成员名定名规则写

LeetCode笔记:237. Delete Node in a Linked List

题目: Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -

linux下内存

MMU由一个或一组芯片组成.其功能是把逻辑地址映射为物理地址,进行地址转换(MMU是CPU的一部分) 机器指令仍然用逻辑地址指定一个操作数的地址或一条指令的地址 每个逻辑地址都由一个段选择符(16位)和段内的相对偏移量(32位)组成. 段寄存器的唯一目的是存放段选择符. MMU包括两个部件:分段部件和分页部件,分段机制将逻辑地址转换为线性地址,分页机制把线性地址转换为物理地址. 在RAM芯片上的读或写必须串行地运行,因此一种内存仲裁器的硬件电路插在总线和每一个RAM芯片之间. 在整个系统中全局描

深入理解Linux内核day07--内存管理

内存管理 RAM的某些部分永久的分配给内核,并用来存放内核代码以及静态内核数据结构. RAM的其余部分称为动态内存(dynamic memory),这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源.实际上,整个系统的性能取决于如何有效地管理动态内存. 因此,现在所有多任务操作系统都在尽力优化对动态内存的使用,也就是说,尽可能做到当需要时分配,不需要时释放. 页框管理 Linux采用4KB页框大小作为标准的内存分配单元.基于以下两个原因,这会使事情变得简单: 1.由分页单元引发的缺页异常很容