C++实现单向链表

原创 2016年06月01日 16:43:58
****************************IntSLList.h*****************************/
#ifndef _INTSLLIST_H_
#define _INTSLLIST_H_


class IntSLLNode{
public:
        IntSLLNode(){next = 0;}
        IntSLLNode(int el, IntSLLNode *ptr = 0){
                info = el; next = ptr;
        }
        int info;
        IntSLLNode *next;
};

class IntSLList{
public:
        IntSLList(){head = tail = 0;} 
        ~IntSLList();
        int isEmpty(){return head == 0;} 
        
        void addToHead(int);
        void addToTail(int);

        void deleteNode(int);
        bool isInList(int)const;
        void print()const;
private:
        IntSLLNode *head,*tail;
};

#endif
/**************************IntSLList.cpp****************************/
#include "IntSLList.h"
#include <iostream>

IntSLList::~IntSLList()
{
        for(IntSLLNode *p; !isEmpty();){     
                p = head->next;
                delete head;
                head = p;
        }
}

void IntSLList::addToHead(int el) 
{
        head = new IntSLLNode(el);
        if(0 == tail)
                tail = head;
}

void IntSLList::addToTail(int el) 
{
        if(tail != 0){ 
                tail->next = new IntSLLNode(el);
                tail = tail->next;
        }
        else{
                head = tail = new IntSLLNode(el);
        }
}

int IntSLList::deleteFromHead()
{
        int el = head->info;
        IntSLLNode *tmp = head;
        if(head == tail)
                head = tail = 0;
        else
                head = head->next;
        delete tmp;
        return el;
}

int IntSLList::deleteFromTail()
{
        int el = tail->info;
        if(head == tail){
                delete head;
                head = tail = 0;
        }
        else{
                IntSLLNode *tmp;
                for(tmp = head; tmp->next != tail; tmp = tmp->next);
                delete tail;
                tail = tmp;
                tmp->next = 0;
        }
        return el;
}

void IntSLList::deleteNode(int el)
{
        if(head != 0)
                if(el == head->info && head == tail){
                        delete head;
                        head = tail = 0;
                }
                else if(el == head->info){
                        IntSLLNode *tmp;
                        head = head->next;
                        delete tmp;
                }
                else{
                        IntSLLNode *pred,*tmp;
                        for(pred = head, tmp = head->next;
                            tmp !=0 && !(tmp->info == el);
                            pred = pred->next, tmp = tmp->next);
                        if(tmp != 0){
                                pred->next = tmp->next;
                                if(tmp == tail)
                                        tail = pred;
                                delete tmp;
                        }
                }
}

bool IntSLList::isInList(int el)const
{
        IntSLLNode *tmp;
        for(tmp = head; tmp !=0 && tmp->info != el; tmp = tmp->next);
        return tmp != 0;
}

void IntSLList::print()const
{
        IntSLLNode *tmp;
        for(tmp = head; tmp != 0; tmp = tmp->next){
                std::cout << tmp->info << ' ';
        }
        std::cout << std::endl;
}



版权声明:本文为博主原创文章,转载请注明出处,谢谢。

单向链表的c++实现

******************************************************************** * File Name    : example1.h  e...
  • lanpangbuxueda
  • lanpangbuxueda
  • 2012年06月08日 15:41
  • 2908

C++:单向链表实现

C++:16.03.11 实验课总结标签: C++by 小威威概况: 本次实验课的代码题难度较大(对于刚刚入门C++的人来说),对于解答者有一定的要求:1.了解链表的基本操作;2.对于浅复制与深复制...
  • linwh8
  • linwh8
  • 2016年03月16日 22:15
  • 854

C++模板实现的单向链表

C++模板实现的单向链表,实现了链表的初始化创建,元素插入,元素链表末尾添加,元素删除,链表清空 //Lists.h #ifndef DDXXLISTS_H #define DDXXLISTS_H #...
  • zhuhuangtianzi
  • zhuhuangtianzi
  • 2014年02月27日 00:57
  • 1405

单向链表之C++实现

单向链表是常用的数据结构,之前只是看过,没有自己动手实现过,现在来
  • KangRoger
  • KangRoger
  • 2014年07月01日 21:20
  • 8199

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

最近在linux了一个简单的单向链表,直接上代码 链表头文件   list.h #ifndef _LIST_H_ #define _LIST_H_ typedef int T; te...
  • u011641755
  • u011641755
  • 2016年09月17日 21:00
  • 1203

单链表的实现(C++版)

// 带头节点单链表的C++实现 #include "stdafx.h" #include #include using namespace std; class CNode ...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2014年05月12日 20:27
  • 6635

C++单项链表的构造及简单功能的实现

/* 1.带头结点 2.遍历单项链表 3.删除链表E 4.判断链表是否有序 5.合成2个有序链表 */ #include "iostream" using namespace std; //ty...
  • qq_28711703
  • qq_28711703
  • 2016年05月03日 11:21
  • 412

单链表的增删查改(C++实现)

Slist.h: #pragma once  #include using namespace std; typedef int DataType; struct N...
  • qingdou_aixuexi
  • qingdou_aixuexi
  • 2016年08月21日 18:02
  • 181

c++实现单链表基本操作

程序媛决定好好学习写代码 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时...
  • u011200403
  • u011200403
  • 2017年02月13日 19:33
  • 1100

C++ STL学习笔记五 slist单向链表容器

/* * ******************************************** *   slist单向链表容器的基础说明: ****************************...
  • cumirror
  • cumirror
  • 2010年04月05日 12:31
  • 4717
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++实现单向链表
举报原因:
原因补充:

(最多只允许输入30个字)