双链表一些基本功能的简单实现
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;
}
#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;
}
相关文章推荐
- 链表的建立和一些基本功能的实现
- C#+Mapxtreme 实现一些GIS系统基本的功能
- 数据结构与算法学习 第1季02 链表的基本功能 C++实现
- c# 的实现的一些简单功能
- php结合表单实现一些简单功能的例子
- saltstack一些简单总结--利用saltstack的event实现自己的功能(2)
- C#+Mapxtreme 实现一些GIS系统基本的功能
- 链表的一些基本功能
- QT控件——ui界面简单实现一些功能
- PHP简单实现循环链表功能示例
- 用C实现基本链表功能
- 用C#实现链表的一些功能
- 最简单的音乐播放器,实现播放器基本功能(一)
- 简单实现日期计算器的基本功能
- PHP的简单易懂文件管理,可实现基本功能
- 数据结构--单链表基本功能实现程序…
- 实现一些简单的单链表
- 简单实现wc.exe软件基本功能
- 线性表中单链表基本功能实现
- 用自定义的队列实现一些基本功能