#include
#include
using namespace std;
// 线性表的双向链表存储结构
struct node{
int
data;
node
*prev,*next; // 声明
};
// 双向链表存储
class doubleLink{
private:
node
*eleStart,*eleEnd;
node*
nodeLink(node*,int);// 形成链表
void
writeData(int*,int); // 输入数组,形成链表
node*
backNodeFromKey(int);// 根据键值返回对象指针
public:
doubleLink(int *iData,int Length);// 构造函数
doubleLink();// 构造函数,手动输入,构建双向链表
~doubleLink(); // 析构函数
void
printFromEnd(); // 从后前遍历并输出
void
printFromStart(); // 从前往后遍历并输出
int
pop();
int
push(int);
int
length();//@todo 未定义
void
add(int,int);// 局部增加
node*
isEmpty();// 判断是否为空
};
// 输入任何数字
int main(){
doubleLink
*dl = new doubleLink();
if(!
dl->isEmpty()) return 0;
dl->add(1,22222);
dl->printFromStart();
delete dl;
return
0;
}
void doubleLink::add(int key,int num){
if(this->length()<0) return;
node* n =
this->backNodeFromKey(key);
node *tmp =
n->next;
n->next =
this->nodeLink(n,num);
n->next->next = tmp;
}
// 从后端弹出
int doubleLink::pop(){
node *tmp =
this->eleEnd->prev;
int t =
this->eleEnd->data;
delete
this->eleEnd;
this->eleEnd = tmp;
tmp
&& (tmp->next = NULL);
return
t;
}
// 从后端写入
int doubleLink::push(int n){
this->eleEnd =
this->nodeLink(this->eleEnd,n);
this->eleEnd->next = NULL;
return
n;
}
int doubleLink::length(){
node *n =
this->eleStart;
int
i=0;
while(n){
n = n->next;
i++;
}
return
i;
}
//从前端弹出,从前端写入,从中间某部分写入
doubleLink::~doubleLink(){
if(this->eleStart){
node *n = this->eleStart;
node *n1;
while(n){
n1 = n;
n = n->next;
delete n1;
}
}
}
node* doubleLink::isEmpty(){
return
this->eleEnd;
}
doubleLink::doubleLink(int *iData,int Length){
this->writeData(iData,Length);
}
doubleLink::doubleLink(){
cout<<"Enter numbers you want, separated by
space, ending with 0 : ";
int
i=0,num=0;
node
*swapNode = NULL;
while(true){
cin>>num;
if(num == 0) break;
swapNode = this->nodeLink(swapNode,num);
if(i==0) this->eleStart = swapNode;
i++;
}
swapNode
&& (swapNode->next = NULL);
this->eleEnd = swapNode;
}
void doubleLink::printFromEnd(){ // 终结点开始遍历
node *n =
this->eleEnd;
while(n){
cout<<n->data<<endl;
n = n->prev;
}
}
void doubleLink::printFromStart(){ // 起始点开始遍历
node *n =
this->eleStart;
while(n){
cout<<n->data<<endl;
n = n->next;
}
}
// @access private 形成链表
node* doubleLink::nodeLink(node *prev,int data){
//
申请空间,赋值于指针
node
*eleNode = new node; // (node
*)malloc(sizeof(node));
//
写入数据
eleNode->data = data;
//
写入前一个指针
eleNode->prev = prev;
//
前一个指针对象赋值为当前对象
if(prev)
prev->next = eleNode;
//
返回当前对象
return
eleNode;
}
// @access private 数组的形式形成链表存储
void doubleLink::writeData(int *iData,int length){
// 数据
node
*swapNode = NULL;
for(int
i=0,j=length;i!=j;i++){
swapNode =
this->nodeLink(swapNode,*(iData+i));
if(i==0) this->eleStart = swapNode;
}
swapNode->next = NULL;
this->eleEnd = swapNode;
}
// 顺序键值,返回当前的节点
node *doubleLink::backNodeFromKey(int k){
node *n =
this->eleStart;
int v =
0;
while(n){
v++;
if(v == k) break;
n = n->next;
}
return
n;
}
#include
using namespace std;
// 线性表的双向链表存储结构
struct node{
};
// 双向链表存储
class doubleLink{
private:
public:
};
// 输入任何数字
int main(){
delete dl;
}
void doubleLink::add(int key,int num){
}
// 从后端弹出
int doubleLink::pop(){
}
// 从后端写入
int doubleLink::push(int n){
}
int doubleLink::length(){
}
//从前端弹出,从前端写入,从中间某部分写入
doubleLink::~doubleLink(){
}
node* doubleLink::isEmpty(){
}
doubleLink::doubleLink(int *iData,int Length){
}
doubleLink::doubleLink(){
}
void doubleLink::printFromEnd(){ // 终结点开始遍历
}
void doubleLink::printFromStart(){ // 起始点开始遍历
}
// @access private 形成链表
node* doubleLink::nodeLink(node *prev,int data){
}
// @access private 数组的形式形成链表存储
void doubleLink::writeData(int *iData,int length){
}
// 顺序键值,返回当前的节点
node *doubleLink::backNodeFromKey(int k){
}