您的位置:首页 > 其它

双链表一些基本功能的简单实现

2012-12-06 14:59 387 查看
#include <iostream>
#include <st
4000
dio.h>
#include <stdlib.h>
using namespace std;

typedef struct doubleList
{
int data;
struct doubleList *left;
struct doubleList *right;
}node;

node *create()
{
node *head, *p, *q;
head = (node *)malloc(sizeof(node));
p = head;
q = NULL;
int value;
while(1)
{
cout<<"input element to create
doubleList(0 to exit):"<<endl;
cin>>value;
if(value == 0)
{
if(p == head)
{
head = NULL;
break;
}
if(q != NULL)
q->right = NULL;
break;
}
else
{
p->data = value;
p->right = (node
*)malloc(sizeof(node));//分配存储节点空间
p->left = q;
q = p;
p = p->right;
}
}
if(head != NULL)
head->left = NULL;
return head;
}

int lengthList(node *head)
{
int count = 0;
while(head != NULL)
{
count++;
head = head->right;
}
return count;
}

void display(node *head)
{
if(head == NULL)
{
cout<<"Empty
list!"<<endl;
return ;
}
node *p = head;
cout<<"Elements of
list:"<<endl;
while(p->right != NULL)
{

cout<<p->data<<endl;
p = p->right;
}

cout<<p->data<<endl;
return ;
}

node *deleteElement(node *head, int del)
{
node *p;
p = head;
while(p != NULL)
{
if(p->data == del)
{
if(p->left == NULL
&& p->right ==
NULL)
{
head = NULL;
return head;
}
else
{
if(p->left == NULL)
{
p->right->left = NULL;
return p->right;
}
else
{
if(p->right == NULL)
{
p->left->right = NULL;
return head;
}
else
{
p->right->left =
p->left;
p->left->right =
p->right;
return head;
}
}
}
}
p = p->right;
}
if(p == NULL)
{
cout<<"element not
exist!"<<endl;
return head;
}
}

node *insertElement(node *head, int x)
{
node *p = head;
node *q = (node *)malloc(sizeof(node));
while(p->data < x
&& p->right !=
NULL)
{
p = p->right;
}
if(p->left == NULL
&& p->right ==
NULL)
{
if(p->data < x)
{
q->data = x;
p->right = q;
q->left = p;
q->right = NULL;
}
else
{
q->data = x;
p->left = q;
q->right = p;
q->left = NULL;
head = q;
}
}
else
{
if(p->left == NULL)
{
if(p->data < x)
{
q->data = x;
q->right = p->right;
p->left = p;
p->right = q;
}
else
{
q->data = x;
q->left = NULL;
q->right = p;
p->left = q;
head = q;
}
}
else
{
if(p->right == NULL)
{
if(p->data < x)
{
q->data = x;
q->right = NULL;
q->left = p;
p->right = q;
}
else
{
q->data = x;
q->right = p;
q->left = p->left;
p->left = q;
}
}
else
{
if(p->data < x)
{
q->data = x;
q->left = p;
p->right = p->right;
p->right = q;
}
else
{
q->data = x;
q->right = p;
q->left = p->left;
p->left = q;
}
}
}
}
return head;
}

node *reserveList(node *head)
{
while(head->right != NULL)
{
swap(head->left,
head->right);
head = head->left;
}
swap(head->left,
head->right);
return head;
}

void swap(node *&a, node
*&b)
{
node *temp;
temp = a;
a = b;
b = temp;
}

int main()
{
node *list;
int x;
list = create();
cout<<"length of
list:"<<lengthList(list)<<endl;
display(list);
cout<<"input deleted
element:"<<endl;
cin>>x;
list = deleteElement(list, x);
cout<<"length of
list:"<<lengthList(list)<<endl;
display(list);
cout<<"intput inserted
element:"<<endl;
cin>>x;
list = insertElement(list, x);
cout<<"length of
list:"<<lengthList(list)<<endl;
cout<<"intput inserted
element:"<<endl;
display(list);
cout<<"reserve the
list:"<<endl;
display(reserveList(list));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: