近日在复习数据结构,贴一下练习写的代码,线性链表:
// 如果这段代码对你有用,请任意处置。
#include <iostream>
#include <cstdlib>
using namespace std;
template<class Type> class LinkList;
template<class Type> class SNode
{
friend class LinkList<Type>;
private:
Type data;
SNode<Type> *next;
};
template<class Type> class LinkList
{
public:
LinkList();
~LinkList();
int Length();
void Insert(Type a, Type b);// insert element b after a
bool Delete(Type item);
SNode<Type> *Find(Type item);
bool isEmpty();
void Clear();
Type GetData(const SNode<Type> *p);
SNode<Type> *NextOf(const SNode<Type> *p);
private:
SNode<Type> *head;
};
template<class Type> LinkList<Type>::LinkList()
{
head = NULL;
}
template<class Type> LinkList<Type>::~LinkList()
{
Clear();
}
template<class Type> int LinkList<Type>::Length()
{
int len = 0;
SNode<Type> *p = head;
while(p)
{
len++;
p = p->next;
}
return len;
}
template<class Type> SNode<Type> *LinkList<Type>::Find(Type item)
{
SNode<Type> *p = head;
while(p)
{
if(p->data == item)
{
return p;
}
p = p->next;
}
return NULL;
}
template<class Type> void LinkList<Type>::Insert(Type a, Type b)
{
SNode<Type> *p = NULL;
SNode<Type> *newp = NULL;
if(head == NULL)
{
newp = new SNode<Type>;
newp->data = b;
newp->next = NULL;
head = newp;
}
else if((p = Find(a)) != NULL)
{
newp = new SNode<Type>;
newp->data = b;
p->next = newp;
newp->next = NULL;
}
}
template<class Type> bool LinkList<Type>::Delete(Type item)
{
SNode<Type>* p = head, *q = NULL;
while(p!=NULL)
{
if(p->data == item) break;
q = p;
p = p->next;
}
if(q==NULL)
{
head = p->next;
delete p;
}
else if(p == NULL)
{
return false;
}
else
{
q->next = p->next;
delete p;
}
return true;
}
template<class Type> Type LinkList<Type>::GetData(const SNode<Type> *p)
{
if(p!=NULL)
return p->data;
else
{
cerr<<"Error: ..."<<endl;
exit(1);
}
}
template<class Type> SNode<Type> *LinkList<Type>::NextOf(const SNode<Type> *p)
{
if(p!=NULL)
return p->next;
else
{
cerr<<"Error: ..."<<endl;
exit(1);
}
}
template<class Type> bool LinkList<Type>::isEmpty()
{
return head==NULL;
}
template<class Type> void LinkList<Type>::Clear()
{
SNode<Type> *p = head, *q = NULL;
while(p)
{
q = p;
p = p->next;
delete q;
}
head = NULL;
}
int main()
{
LinkList<int> ll;
SNode<int> *node;
ll.Insert(0,100);
ll.Insert(100,200);
cout<<"Length of ll: "<<ll.Length()<<endl;
node = ll.Find(100);
if(node != NULL)
{
cout<<ll.GetData(ll.NextOf(node))<<endl;
}
ll.Delete(200);
node = ll.Find(200);
if(node != NULL)
{
cout<<ll.GetData(node)<<endl;
}
else
{
cout<<"can't find 200"<<endl;
}
if(!ll.isEmpty())
{
cout<<"not empty"<<endl;
ll.Clear();
}
if(ll.isEmpty()) cout<<"empty now"<<endl;
return 0;
}
分享到:
相关推荐
简单的代码。数据结构中的代码实现。
简单的线性链表的建立、查询、插入、删除功能的C源程序
本文实例讲述了Python实现数据结构线性链表(单链表)算法。分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。 #!/usr/bin/python # -*- coding:...
简单的来讲一下什么是链表:首先链表是一种线性的数据结构(其他数据结构还有,树、图),是在每一个节点里存到下一个节点(next)的指针(Pointer)。 链表最大的好处则是采用了见缝插针的方式,链表中的每一个节点...
杜比ES6的双重圆形和线性链表描述具有TypeScript支持的圆形和线性双链表数据结构的ES6实现。 请访问以了解更多有关如何将此文档翻译成更多语言的信息。内容安装纱yarn add doublieNPM npm install doublie用法...
该软件为本人数据结构课程设计作业,采用win32控制台程序,基于链表的增删改查,实现简单的通信录管理系统,具体可以参看我的博客http://blog.csdn.net/htq__/article/details/50846567
实现链式线性表的逆置,从链表处实现。代码简单,容易理解。
从实际应用出发重新定义线性链表及其基本操作,从新定义的链表结构更加直观,节俭,易懂,思路清晰。 从编写底层驱动的思路来编写了库,整个编写只为实现简单的链表结构代码,对于程序员来说,编写驱动要对用户...
本文先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的C、C++和Java三种语言的实现,需要的朋友可以参考下
该一元稀疏多项式简单计数器是用C语言编写,采用线性链表的方式存储,能实现多项式的加减乘除,效率高。
基于静态链表实现线性表 List2 的典型操作(判空、判满、求表长、插入、删除、查找、修改、遍历、置空、 普通构造),编写简单程序使用该线性表,测试和调试程序。 基于线性表 List1、线性表 List2 实现线性表的应用...
数据结构是用线性链表实现的,非常的简单易懂,
要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的...
实现对员工信息的排序、查询、更新、插入、删除。可以存储员工信息到文件、读取文件中的信息。 优势分析 ... 内容比较简单,采用大家熟悉的线性链表存储结构,难度不是很大,只要注意细节即可。
本程序为云南大学软件学院数据结构实验,实验要求实现一元稀疏多项式的降幂排列、求导、加减乘;要求实现线性方程组求解。
线性链表逆置 顺序栈的基本操作 循环队列的基本操作 栈的应用——进制转换 括号匹配检验 行编辑程序 表达式求值 队列的应用——银行客户平均等待时间 计算next值 KMP算法 二叉树的构建及遍历操作 实现...
2、会用线性链表解决简单的实际问题。 二、实验内容 题目一、该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及 对单链表操作的具体的函数定义和主函数。其中,程序中的单链表(带头结点)结点 ...
2、会用线性链表解决简单的实际问题。 二、实验内容 题目一 链表基本操作 该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操 作的具体的函数定义和主函数。其中,程序中的单链表...
顺序表是一种线性存储结构,它采用一段连续的物理地址存储数据元素,具有元素随机存取、存储密度高、插入...通过运用C语言的数据类型和函数库,可以简单实现一个顺序表,并提供常用的接口操作,如插入、删除、查找等。
1. 基于双链表实现双端队列的典型操作(判空、头插、头删、尾插、尾删、普通构造、拷贝构造、赋值运算符重载、析构),编写简单程序使用该双端队列,测试和调试程序。 2. 基于双端队列的头插、头删操作,完成栈的...