双线性链表代码 C++描述
来源:互联网 发布:淘宝店铺怎么推广好 编辑:程序博客网 时间:2024/06/06 03:23
#include <iostream>
#include <stdlib.h>
template <class T>
struct Node{ //结点类型
T data;
Node *next; //前驱结点
Node *prev; //后继结点
};
template <class T>
class lnkList{ //链表类型
Node<T> *head,*tail;
public:
lnkList(){ //初始化链表
head = tail =new Node<T>;
head->next=NULL;
}
~lnkList(){ //析构函数,删去链表
Node<T> *tmp;
while(head!=NULL){
tmp=head;
head=head->next;
delete tmp;
}
}
bool Insert(const int n,T value);
bool Delete(const int n,T &value);
bool TailAppend(const T value);
bool headAppend(const T value);
bool GetValue(const int n,T &value);
void Print();
};
template <class T>
bool lnkList<T>::headAppend(const T value){ //头插法
Node<T> *p=new Node<T>;
p->data=value;
p->next=head->next;
p->prev=head;
head->next->prev=p;
head->next=p;
return true;
}
template <class T>
bool lnkList<T>::TailAppend(const T value){ //尾插法
Node<T> *p=tail;
Node<T> *q=new Node<T>;
q->data=value;
q->prev=q;
q->next=NULL;
p->next=q;
tail=q;
return true;
}
template <class T>
void lnkList<T>::Print(){ //打印输出链表
Node<T> *p=head->next;
while(p!=NULL){
std::cout<<p->data<<std::endl;
p=p->next;
}
}
template <class T>
bool lnkList<T>::Insert(const int n,T value){ //在链表第n个位置插入元素
Node<T> *q=head;
int count=1;
while(q&&count<n){
q=q->next;
++count;
}
if(!q||count>n){
return false;
}
Node<T> *p=new Node<T>;
p->data=value;
p->prev=q;
p->next=q->next;
q->next->prev=p;
q->next=p;
return true;
}
template <class T>
bool lnkList<T>::Delete(const int n,T &value){ //删除链表的第n个位置元素
Node<T> *q=head;
int count=1;
while(q&&count<n){
q=q->next;
++count;
}
Node<T> *p=q->next;
q->next=p->next;
p->next->prev=q;
value=p->data;
delete p;
return true;
}
template <class T>
bool lnkList<T>::GetValue(const int n,T &value){ //得到链表的第n个元素
Node<T> *q=head;
int count=1;
while(q&&count<n){
q=q->next;
++count;
}
if(n<1||!q){
return false;
}
value=q->next->data;
return true;
}
//测试代码
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
double m;
lnkList<double> l;
l.TailAppend(2);
l.TailAppend(3);
l.TailAppend(4);
l.TailAppend(5);
l.headAppend(1);
l.headAppend(0);
l.Insert(3,1.5);
l.GetValue(3,m);
l.Print();
return 0;
}
//////////////////////////////////////////////////////////////////////////
//在VS2008上测试通过
- 双线性链表代码 C++描述
- KMP算法C代码描述
- 双线性插值2-代码
- 三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)+双线性插值
- 分布式病毒协议的C/C++描述代码
- 《算法精讲:C语言描述》-单链表实现代码
- Delphi代码的双线性插值算法
- DSP双线性差值代码优化
- 双线性插值算法推导及代码实现
- 双线性插值与双三次插值算法代码
- [转] 一段双线性插值的代码
- 双线性插值理论与代码实例
- 代码调试技巧小集合(C语言描述,但C/C++/Pascal通用)
- 关于计算机将c代码转换成汇编代码的过程描述
- DB2代码 错误信息描述
- Dijstra算法代码描述
- 算法描述---伪代码
- 算法描述---伪代码
- spring 管理N多个hibernate文件 的简便方法
- 用Java编写你自己的简单HTTP服务器
- C# 获取TreeView选中节点的value和Text
- ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
- linux awk命令怎么用?
- 双线性链表代码 C++描述
- 一份新的工作
- Eclipse快捷键 10个最有用的快捷键
- 字符串操作
- 硬件抽象层HAL (Hardware Abstraction Layer )
- JDO与JPA哪个更好?
- 如何获取某个sql语句的执行计划---方法一
- oracle如何查看与修改最大游标数
- PE格式详解 输入表信息(下)