# (二)双链表的构造及相关操作

1287人阅读 评论(0)

#include<iostream>
using namespace std;
/**
author:hendery
content:Creat a double linked list and implement the relevent
operations such as:inserting an element,deleteing an
element,search an element,getting the length of the
list,printing the data of all elements and so with it。
time:2012-3-24
*/
struct Node
{
struct Node *prior;
int data;
struct Node *next;
};

Node *CreatDoubleList()//建立双链表
{

int i = 1;
while(true)
{
node = (Node*)malloc(sizeof(Node));
cout<<"输入第"<<i++<<"节点的值"<<endl;
cin>>node->data;
if(node->data == -1)
break;
temp->next = node;
node->prior = temp;
temp = temp->next;
}
temp->next = NULL;
}

{
int i = 0;
Node *node;
while(node->next!=NULL)
{

node = node->next;
i++;
}
return i;
}

Node *insertElement(Node *head,int i,int data)//i代表插入的位置,data 为插入值
{
{
cout<<"error!";
return NULL;
}
int j = 0;
Node *temp;
//while(temp&&j<i-1)
while(j<i-1&&temp)
{

temp = temp->next;//找到插入节点的位置
j++;
}
Node *node;
node = (Node*)malloc(sizeof(Node));//为要插入的节点申请空间
node->next = temp->next;//要插入的节点的后继指向temp的后继
temp->next->prior = node;//temp的前驱指向node
temp->next = node;		//temp的后继指向node
node->prior = temp;		//node的前驱指向temp
node->data = data;		//写入值

}

{
{
cout<<"error!"<<endl;
return NULL;
}
int j = 0;
Node *temp;
while(j<i-1&&temp)
{
j++;
temp = temp->next;
}
/*if(temp->next==NULL)
free(temp);
Node *p;
p=temp->next;
temp->next=p->next;
p->next->prior=temp;
free(p);*/
if(temp->next==NULL)
{
temp->prior->next=NULL;//此步骤是关键，在删除最后一个节点时，需要将其的                                  prior改为尾节点
free(temp);

}
else
{
/*temp为要删除的节点，将temp的prior指向temp的next
temp的next的prior指向temp->prior
*/
temp->prior->next=temp->next;
temp->next->prior=temp->prior;
free(temp);
}
}
{
int j = 0;
Node *temp;
while((j++)<i&&temp)
{
temp=temp->next;
}
if(temp==NULL)
{
cout<<"位置有误！"<<endl;
return;
}
cout<<"第"<<i<<"个元素的值为:"<<temp->data<<endl;
}
{
Node *node;
cout<<"当前链表中的元素有："<<endl;
while(node!=NULL)
{
cout<<node->data<<" ";
node = node->next;
}
}
void main()
{
int len;
cout<<"length of list is:"<<len<<endl;

int location,data;
cout<<"输入要插入节点的位置和值"<<endl;
cout<<"位置：";
cin>>location;
cout<<"值：";
cin>>data;

int i;
cout<<"输入要删除节点的位置"<<endl;
cin>>i;

int s;
cout<<"输入要查找节点的位置";
cin>>s;
system("pause");
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：34213次
• 积分：520
• 等级：
• 排名：千里之外
• 原创：16篇
• 转载：4篇
• 译文：0篇
• 评论：6条
文章分类
评论排行
最新评论