单链表-这个simplelist.h是怎么搞的?不太明白?关于c++的

问题描述

这个simplelist.h是怎么搞的?不太明白?关于c++的

这个simplelist。h是怎么搞的?不太明白?

#if !defined_LIST_H_
#define LIST_H
//单链表定义
#include
#include"simplelist.h"

int main()
{
List l1;
cout<<"以-1作为约定的链表数据输入结束符号"<
cout
l1.inputFrond(-1);
l1.output();
List l2(l1);
l2.output();
return 0;
}

template //链表节点类的定义

struct LinkNode
{
T date; //数据域
LinkNode*link; //链指针域
LinkNode(LinkNode *ptr =NULL) {link=ptr;}
LinkNode(const T&item,LinkNode *ptr=NULL)
{
data=item;
link=ptr;
}
};

template
class List
{
public:
List(){first=new LinkNode;}
List(const T &x){first= new LinkNode(x);}
List(List &L);
~List(){makeEmpty();}
void makeEmpty();
int Length() const;
LinkNode *getHead()const{return first;}
LinkNode *Search(T x);
LinkNode *Locate(int i);
bool getData(int i,T &x)const;
void setData(int i,T &x);
bool Insert(int i, T &x);
bool Remove(int i, T &x);

    bool IsEmpty()const
    {
        return first->link==NULL?true:false;
    }
    bool IsFull()const{return false ;}

    void Sort()
    void inputFrond (T endTag);
    void output();
    List<T>&operator=(List <T>&L);

protected:
    LinkNode<T> *first;

};

template
List::List(List &L)
{
T value;
LinkNode *srcptr=L.getHead();
LinkNode *desptr=first=new LinkNode;
while(srcptr->link!=NULL)
{
value=srcptr->link->data;
desptr->link=new LinkNode(value);
desptr=desptr->link;
srcptr=srcptr->link;
}
desptr->link=NULL;
}

template
int List::makeEmpty()
{
LinkNode *q;
while(first->link!=NULL)
{
q=first->link;
first->link=q->link;
delete q;

}

}

template
int List::Length()const
{
LinkNode *p=first->link;
int count=0;
while(p!=NULL)
{
p=p->link;
count++
}
return count;

}

template
LinkNode*List::Search(T x)
{
LinkNode*current=first->link;
while(current!=NULL)
if(current->data==x)break;
else current =current->link;
return current;
}

template
LinkNode*List::Loate(int i)
{
if(i<0)
{
return NULL;
}

LinkNode<T>*current =first;
int k=0;
while(current!=NULL&&k<i)
{
    current=current->link;
    k++;
}
return current;

}

template
bool List::getData(int i,T &x)const
{
if(i
LinkNode *current=Locate(i);
if(current==NULL) return false ;
else
{
x=current->data;
return true;
}
}

template
void List::setData(int i,T &x)
{
if(i<=0) return;
LinkNode *current =Locate(i);
if(current==NULL) return;
else current->data=x;
}

template
bool List::Insert(int i,T &x)
{
LinkNode *current=Locate(i);
if(current==NULL) return false;
LinkNode *newNode=new LinkNode(x);
if(newNode==NULL){return false;}
newNode->link=current->link;
current->link=newNode;
return true;
}

template
bool List::Remove(int i,T &x)
{
LinkNode*current=Locate(i-1);
if(current==NULL||current->link==NULL) return false;
LinkNode *del=current->link;
current->link=del->link;
x=del->data;
delete del;
return true;

}

template
void List::output()
{
LinkNode *current=first->link;
while(current!=NULL)
{
cout<data<
current=current->link;
}
}

template
void List::inputFront(T endTag)
{
LinkNode *newNode;
T val;
//MakeEmpty();
cin>>val;
while(val!=endTag)
{
newNode=new LinkNode(val);
if(newNode==NULL)
{
cerr<<"储存分配错误"<
}
newNode->link=first->link;//插在表前端
first->link=newNode;
cin>>val;
}
}

template
List &List::operator=(List &L)
{
LinkNode *srcptr =L.getHead();
LinkNode *desptr =first=new LinkNode;
while(srcptr->link!=NULL)
{
value=srcptr->link->data;
desptr=desptr->link;
srcptr=srcptr->link;
}
desptr->link=NULL;
}

#endif

解决方案

挺长的,具体哪里不明白?如果都不明白,说来就话长了。

解决方案二:

就是一个模板实现的链表。具体看下数据结构

时间: 2024-08-04 05:31:18

单链表-这个simplelist.h是怎么搞的?不太明白?关于c++的的相关文章

数据结构例程——单链表应用举例

本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例. 例:拆分单链表 (linklist.h是单链表"算法库"中的头文件,详情单击链接-) #include <stdio.h> #include <malloc.h> #include "linklist.h" void split(LinkList *&L,LinkList *&L1,LinkList *&L2) { LinkList *p=L-

动态单链表的传统存储方式和10种常见操作-C语言实现

顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题.   一般链表的存储方法 一组物理位置任意的存储单元来存放线性表的数据元素,当然物理位置可以连续,也可以不连续,或者离散的分配到内存中的任意位置上都是可以的.故链表的逻辑顺序和物理顺序不一定一样.   因为,链表的逻辑关系和物理关系没有必然联系,那么表示数据元素之间的逻辑映象就要使用指针,每一个存储

C语言数据结构单链表之温故而知新

抛弃繁杂的定义,以实用,实战的角度来学习数据结构,这将使得数据结构的学习非常的简单. 前面已经学习了单链表的创建操作:http://blog.csdn.net/morixinguan/article/details/68951912 这节,将单链表温习的笔记共享出来,然后写一个例子,以防自己忘记. 1.单链表的数据结构的定义: 创建节点函数原型可定义如下: struct list *create_node(int data) ; 如何创建单链表的节点,主要分以下步骤: (1)给当前的每个节点的数

单链表的头指针和头结点问题??

问题描述 单链表的头指针和头结点问题?? Status InitList(LinkList L) { / 操作结果:构造一个空的线性表L / *L=(LinkList)malloc(sizeof(struct LNode)); / 产生头结点,并使L指向此头结点 / if(!*L) / 存储分配失败 / exit(OVERFLOW); (*L)->next=NULL; / 指针域为空 */ return OK; } 它是怎么实现将L指向此头结点的??? 解决方案 1.L是一个指针变量,那么下面这

深入单链表的快速排序详解_C 语言

单链表的快排序和数组的快排序基本思想相同,同样是基于划分,但是又有很大的不同:单链表不支持基于下标的访问.故书中把待排序的链表拆分为2个子链表.为了简单起见,选择链表的第一个节点作为基准,然后进行比较,比基准小得节点放入左面的子链表,比基准大的放入右边的子链表.在对待排序链表扫描一遍之后,左边子链表的节点值都小于基准的值,右边子链表的值都大于基准的值,然后把基准插入到链表中,并作为连接两个子链表的桥梁.然后分别对左.右两个子链表进行递归快速排序,以提高性能.但是,由于单链表不能像数组那样随机存储

数据结构模版----单链表实现方式总结

数据结构模版----单链表实现方式总结 前面我们提供了四种方式实现的单链表,有带头结点的不带头结点的,而单链表的结构体定义也有两种方式,那么这些实现方式,到底有什么区别呢,为什么会出现这么多种实现方式呢,下面我们就来细细体会 一 单链表结构体的实现区别 首先我们对比一下,单链表结构体 不同方式的单链表实现时,链表结点的实现是相同的,不同之处在于单链表结构体的实现上 单链表结构体的实现 [cpp] view plain copy print? typedef int ElemType;      

数据结构学习(C++)之单链表

节点类 #ifndef Node_H#define Node_Htemplate <class Type> class Node //单链节点类{ public: Type data; Node<Type> *link; Node() : data(Type()), link(NULL) {} Node(const Type &item) : data(item), link(NULL) {} Node(const Type &item, Node<Type&

数据结构的C++实现之线性表之链式存储结构以及单链表反转

为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai,除了存储其自身的信息之外,还需存储一 个指示其直接后继的信息(即直接后继的存储位置).这两部分信息组成数据元素ai的存储映像,称为结点(Node).N个 结点链结成一个链表,即为线性表(a1,a2,...,an)的链式存储结构,因为此链表的每个节点中只包含一个指针域,所以叫 做单链表. 我们把链表中的第一个结点的存储位置叫做头指针,,为了更方便地对链表进行操作,如删除第一个结 点的特殊情况(第一个结点没有前驱,而要摘除一

数据结构的C++实现之程序加图示分析单链表的插入和删除操作

下图展示了单链表的基本结构: head指针是链表的头指针,指向第一个节点 ,每个节点的next指针域指向下一个节点,最后一个节点的next指针域为NULL,在图中用0表示. 下面先来看程序( 栈的链式存储实现,另外一个实现点这里)和对应的输出(注意输出前进行了链表反转(见<单链表反转>,否则程序后面 的while循环输出的顺序是250,200,100),接着来分析程序: /* linkedlist.h */#ifndef LINKEDLIST_H#define LINKEDLIST_Htype