当前位置: 编程技术>c/c++/嵌入式
C++ 构造双向链表的实现代码
来源: 互联网 发布时间:2014-10-17
本文导语: 构造双向链表,不足之处,还望指正! 代码如下:// DoubleLinkedList.cpp : 定义控制台应用程序的入口点。//构造双向链表,实现从控制台输入,插入,删除,求大小size等操作#include "stdafx.h"#include using namespace std;//定义双向链表的...
构造双向链表,不足之处,还望指正!
// DoubleLinkedList.cpp : 定义控制台应用程序的入口点。
//构造双向链表,实现从控制台输入,插入,删除,求大小size等操作
#include "stdafx.h"
#include
using namespace std;
//定义双向链表的节点
template
struct NODE
{
NODE* pre;
T data;
NODE* next;
};
//定义双向链表容器
template
class DoubleLinkedList
{
public:
DoubleLinkedList()
{
NODE* q = new NODE;
if (q == NULL)
{
cout data = NULL;
phead->next = NULL;
T i;
cout i)
{
NODE* p = new NODE;
if (p == NULL)
{
cout next = p;
p->pre = q;
p->next = NULL;
q = q->next;
}
}
//容器大小方法
int size()
{
NODE* p = phead->next;
int count(0);
while (p != NULL)
{
count++;
p = p->next;
}
return count;
}
//输出DoubleLinkedLIst中的元素
void print_elements()
{
NODE* p = phead->next;
while (p != NULL)
{
cout data next;
}
cout next;
}
NODE* n = m->next;
NODE* p = new NODE;
if (p == NULL)
{
cout pre = m;
p->data = e;
p->next = n;
n->pre = p;
}
else if (i == (this->size()+1))
{
NODE* m = phead;
for (int j = 1; j < i; j++)
{
m = m->next;
}
NODE* p = new NODE;
if (p == NULL)
{
cout pre = m;
p->data = e;
p->next = NULL;
}
else
{
cout next;
if (p == NULL)
{//所要删除的元素超过list的范围
cout next = n;
n->pre = m;
delete p;
}
else
{//删除元素为最后一个
NODE* m = p->pre;
m->next = NULL;
delete p;
}
}
private:
NODE* phead;
};
int _tmain(int argc, _TCHAR* argv[])
{
//测试代码
DoubleLinkedList mylist;
mylist.print_elements();
cout
C++ I/O 成员 Constructors:构造器
深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
C++函数返回值为对象时,构造析构函数的执行细节
C++ STL Bitsets构造函数及成员函数解释及代码示例
C++友元函数与拷贝构造函数详解
c++ 构造函数的初始化列表
C++中拷贝构造函数的应用详解
C++类成员构造函数和析构函数顺序示例详细讲解
深入C++拷贝构造函数的总结详解
C++ explicit构造函数实例解析
c++拷贝构造函数防篡改示例
c++类构造函数详解
C++中拷贝构造函数的总结详解
深入解析C++中的构造函数和析构函数
c++基础语法:构造函数与析构函数
C++拷贝构造函数(深拷贝与浅拷贝)详解
c++中拷贝构造函数的参数类型必须是引用
c++基础语法:构造函数初始化列表
C++中复制构造函数和重载赋值操作符总结
代码如下:
// DoubleLinkedList.cpp : 定义控制台应用程序的入口点。
//构造双向链表,实现从控制台输入,插入,删除,求大小size等操作
#include "stdafx.h"
#include
using namespace std;
//定义双向链表的节点
template
struct NODE
{
NODE* pre;
T data;
NODE* next;
};
//定义双向链表容器
template
class DoubleLinkedList
{
public:
DoubleLinkedList()
{
NODE* q = new NODE;
if (q == NULL)
{
cout data = NULL;
phead->next = NULL;
T i;
cout i)
{
NODE* p = new NODE;
if (p == NULL)
{
cout next = p;
p->pre = q;
p->next = NULL;
q = q->next;
}
}
//容器大小方法
int size()
{
NODE* p = phead->next;
int count(0);
while (p != NULL)
{
count++;
p = p->next;
}
return count;
}
//输出DoubleLinkedLIst中的元素
void print_elements()
{
NODE* p = phead->next;
while (p != NULL)
{
cout data next;
}
cout next;
}
NODE* n = m->next;
NODE* p = new NODE;
if (p == NULL)
{
cout pre = m;
p->data = e;
p->next = n;
n->pre = p;
}
else if (i == (this->size()+1))
{
NODE* m = phead;
for (int j = 1; j < i; j++)
{
m = m->next;
}
NODE* p = new NODE;
if (p == NULL)
{
cout pre = m;
p->data = e;
p->next = NULL;
}
else
{
cout next;
if (p == NULL)
{//所要删除的元素超过list的范围
cout next = n;
n->pre = m;
delete p;
}
else
{//删除元素为最后一个
NODE* m = p->pre;
m->next = NULL;
delete p;
}
}
private:
NODE* phead;
};
int _tmain(int argc, _TCHAR* argv[])
{
//测试代码
DoubleLinkedList mylist;
mylist.print_elements();
cout