双向链表存储结构
来源:互联网 发布:淘宝商家怎么找客服 编辑:程序博客网 时间:2024/06/05 22:40
#include
#include
using namespace std;
// 线性表的双向链表存储结构
struct node{
intdata;
node*prev,*next; // 声明
};
// 双向链表存储
class doubleLink{
private:
node*eleStart,*eleEnd;
node*nodeLink(node*,int);// 形成链表
voidwriteData(int*,int); // 输入数组,形成链表
node*backNodeFromKey(int);// 根据键值返回对象指针
public:
doubleLink(int *iData,int Length);// 构造函数
doubleLink();// 构造函数,手动输入,构建双向链表
~doubleLink(); // 析构函数
voidprintFromEnd(); // 从后前遍历并输出
voidprintFromStart(); // 从前往后遍历并输出
intpop();
intpush(int);
intlength();//@todo 未定义
voidadd(int,int);// 局部增加
node*isEmpty();// 判断是否为空
};
// 输入任何数字
int main(){
doubleLink*dl = new doubleLink();
if(!dl->isEmpty()) return 0;
dl->add(1,22222);
dl->printFromStart();
delete dl;
return0;
}
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;
deletethis->eleEnd;
this->eleEnd = tmp;
tmp&& (tmp->next = NULL);
returnt;
}
// 从后端写入
int doubleLink::push(int n){
this->eleEnd =this->nodeLink(this->eleEnd,n);
this->eleEnd->next = NULL;
returnn;
}
int doubleLink::length(){
node *n =this->eleStart;
inti=0;
while(n){
n = n->next;
i++;
}
returni;
}
//从前端弹出,从前端写入,从中间某部分写入
doubleLink::~doubleLink(){
if(this->eleStart){
node *n = this->eleStart;
node *n1;
while(n){
n1 = n;
n = n->next;
delete n1;
}
}
}
node* doubleLink::isEmpty(){
returnthis->eleEnd;
}
doubleLink::doubleLink(int *iData,int Length){
this->writeData(iData,Length);
}
doubleLink::doubleLink(){
cout<<"Enter numbers you want, separated byspace, ending with 0 : ";
inti=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);
#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(){