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

#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");
}

• 本文已收录于以下专栏：

双链表的相关操作

// DoubleLinkTable.cpp : Defines the entry point for the console application. #include "stdafx.h" #i...
• sszgg2006
• 2012年05月09日 09:45
• 2176

c++ 实现双链表基本操作

#include #include #include #include /*c++实现双链表的基本操作*/ using namespace std; typedef struct stude...
• cfan0801
• 2012年03月13日 21:02
• 3891

数据结构_双链表的建立及相关操作

#include #include typedef struct DLNode {    int data;   struct DLNode *prior;   struc...
• u013227200
• 2014年07月10日 12:01
• 271

双链表相关操作

#include #include typedef struct DLnode { int data; struct DLnode *prior, *next; }DLnode, *DLin...
• yuliu0552
• 2011年07月30日 16:04
• 941

双链表以及循环链表的基本操作

• u011922261
• 2015年04月27日 18:59
• 766

关于双链表的相关操作

#include #include #include struct node { int data; struct node *next; struct node *prev; }; ...
• qq_38076413
• 2017年05月15日 18:55
• 190

双向链表的建立与基本操作

• kelvinmao
• 2016年04月02日 18:39
• 3650

B-tree的构造及相关操作

#include "bttool.h" int main() { ElemType data; treeNode* root; treeNode* treenode; ro...
• u012684062
• 2017年01月15日 23:47
• 132

实例讲解C++ 双链表基本操作

1.概念 　　双向链表也叫双链表，是链表的一种，它的每个数据结点中都有两个指针，分别指向直接后继和直接前驱。所以，从双向链表中的任意一个结点开始，都可以很方便地访问它的前驱结点和后继结点。一般我...
• whChina
• 2016年04月26日 08:09
• 1985

C/C++学习（九）循环双链表的操作之创建，插入、删除

• qq_15145665
• 2015年12月27日 22:10
• 1502

举报原因： 您举报文章：(二)双链表的构造及相关操作 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)