//
// main.cpp
// 双向链表的基本运算
//
// Created by 柯木超 on 2018/11/27.
// Copyright © 2018 柯木超. All rights reserved.
//
#include <iostream>
// 双向链表的基本数据单元
typedef struct Node{
int data;
struct Node *nextNode; // 指向下一个节点的指针
struct Node *preNode; // 指向上一个节点的指针
}linkNode, *link; // linkNode 是结构体的名称,*link是指向结构体的指针
link createNode(){
link T, P, M; //T 记录头节点 M 记录当前移动节点,P是当前输入节点
T = (link)malloc(sizeof(linkNode));
T->preNode = NULL;
M = T;
for (int i = 0 ; i < 10 ; i++ ){
// 创建新的节点
P = (link)malloc(sizeof(linkNode));
P->data = i;
// 节点的上一个指向上一个节点
P->preNode = M;
M->nextNode = P;
M = P;
}
M->nextNode=NULL;
return T;
}
void printNode(link L){
while (L->nextNode != NULL) {
L = L->nextNode;
printf("L->data%d ", L->data);
printf("L->pre->data%d", L->preNode->data);
printf("\n");
}
printf("\n");
}
// 插入算法的时间主要花在节点的查找上面
link findLink(int number, link L) {
for(int i=0; i<number; i++) {
if (L->nextNode != NULL) {
L = L->nextNode;
}
}
return L;
}
link insertNumber(int data, int number, link L) {
// 思路:整体分连个阶段
/******** 这是第一阶段 node的前面部分跟新创建的节点连接 *********/
// 第一步: 把node 的前节点赋值给新创建的节点的前节点: q ->pre = node->pre
// 第二步: 把新创建的节点q赋值给a[i]的前节点的下一个节点: node->pre->next = q
//******** 这是第二阶段 node的后面部分跟新创建的节点连接 *********/
// 第三步: 把新创建的节点跟node节点重新连接起来: node = q->next
// 第四部:把node和新创建的节点建立双向连接: node->pre = q
// 创建将要插入的节点数据
link newNode = (link)malloc(sizeof(linkNode));
newNode->data = data;
// 获取要插入的位置节点
link node = findLink(number, L);
// 获取要插入的位置上一个节点
link preNode = node->preNode;
/******** 这是第一阶段 node的前面部分跟新创建的节点连接 *********/
// 第一步:前节点连接:把 node 的前节点赋值给新创建的节点的前节点(
newNode->preNode = preNode;
// 第二步:后节点连接:把新创建的节点的后节点跟node的连接起来
preNode->nextNode = newNode;
//******** 这是第二阶段 node的前面部分跟新创建的节点连接 *********/
// 第三步:把新创建的节点跟node的下一个节点重新连接起来: a[i] = q->next
newNode->nextNode = node;
// 第四部:把node和新创建的节点建立双向连接: node->pre = newNode
node->preNode = newNode;
return L;
}
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
link L = createNode();
printNode(L);
insertNumber(30, 3, L);
printNode(L);
return 0;
}
双向链表的基本运算
猜你喜欢
转载自blog.csdn.net/s12117719679/article/details/84567707
今日推荐
周排行