数据结构-关于头插入法建立双向链表

问题描述

关于头插入法建立双向链表

//还没实现
#include
#include
#include
#define OK 1
typedef int elemtype;
typedef int states;
typedef struct DuLNode{
elemtype data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
states create(DuLinkList &L){
DuLinkList p;
L = (DuLinkList)malloc(sizeof(DuLNode));
L->next = NULL;
L->prior = NULL;
printf("please input the length of list:n");
int n;
scanf("%d",&n);
for (int i = n; i > 0; i--){
p = (DuLinkList)malloc(sizeof(DuLNode));
printf("please input data of element No.%dn", i);
scanf("%d", &p->data);
if (L->next = NULL){ L->next = p;
p->prior = L;
p->next = NULL;

    }
    else{
        p->next = L->next;
        p->prior = L;
        L->next->prior = p;
        L->next = p;

    }

}
return OK;

}

void print(DuLinkList L){
DuLinkList p;
p = L->next;
printf("the linklist is like this:n");
while (p){

    printf("t%d", p->data);
    p = p->next;
}
printf("n");

}
void main(){
DuLinkList L;
create(L);
print(L);
system("pause");
}
实在不造哪里不对了。。。求助大神啊感激不尽!!!




解决方案

 if (L->next = NULL){ L->next = p;
p->prior = L;
p->next = NULL;
    }
    else{
        p->next = L->next;
        p->prior = L;//这里L就没变过,所有新创建的节点,它的prior都是执行L的,肯定错了
        L->next->prior = p;
        L->next = p;   //L没变过,也意味着L-next指向的永远是新节点,根据L只能找到一个节点

    }

}

基于你的代码改了一下

 #define OK 1
typedef int elemtype;
typedef int states;
typedef struct DuLNode{
elemtype data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
states create(DuLinkList &L){
DuLinkList p;
DuLinkList L1=NULL;
L = (DuLinkList)malloc(sizeof(DuLNode));
L->next = NULL;
L->prior = NULL;
printf("please input the length of list:n");
int n;
scanf("%d",&n);
for (int i = n; i > 0; i--){
p = (DuLinkList)malloc(sizeof(DuLNode));
printf("please input data of element No.%dn", i);
scanf("%d", &p->data);
if(L1!=NULL){
    L1->next = p;
    p->prior = L1;
    p->next = NULL;
    L1 = p;
}else{
    L = p;
    L1 = p;
}
}
return OK;
}
void print(DuLinkList L){
DuLinkList p;
p = L;
printf("the linklist is like this:n");
while (p){
    printf("t%d", p->data);
    p = p->next;
}
printf("n");
}
void main(){
DuLinkList L;
create(L);
print(L);
system("pause");
}

解决方案二:

http://blog.csdn.net/eric802/article/details/6680244
http://www.nowamagic.net/librarys/veda/detail/1810
http://blog.csdn.net/summersunboy/article/details/6137636

解决方案三:

你能先把代码贴整齐了我再帮你看看吧.

时间: 2024-10-25 22:20:27

数据结构-关于头插入法建立双向链表的相关文章

C#数据结构与算法揭秘四 双向链表_C#教程

首先,明白什么是双向链表.所谓双向链表是如果希望找直接前驱结点和直接后继结点的时间复杂度都是 O(1),那么,需要在结点中设两个引用域,一个保存直接前驱结点的地址,叫 prev,一个直接后继结点的地址,叫 next,这样的链表就是双向链表(Doubly Linked List).双向链表的结点结构示意图如图所示. 双向链表结点的定义与单链表的结点的定义很相似, ,只是双向链表多了一个字段 prev.其实,双向链表更像是一根链条一样,你连我,我连你,不清楚,请看图. 双向链表结点类的实现如下所示

数据结构的C++实现之双向链表实现队列与循环链表

一.双向链表(double linked list)如图26.5,是在单链表的每个结点中,再设置一个指向其前驱结点的指针域.双向 链表的基本操作与单链表基本一样,除了插入和删除的时候需要更改两个指针变量,需要注意的是修改的顺序很重要,插入 如图3-14-5,删除如图3-14-6.

python数据结构之二叉树的建立实例_python

先建立二叉树节点,有一个data数据域,left,right 两个指针域 复制代码 代码如下: # -*- coding: utf - 8 - *-                  class TreeNode(object):     def __init__(self, left=0, right=0, data=0):        self.left = left        self.right = right        self.data = data 复制代码 代码如下:

c语言-链表建立头插法链头乱码

问题描述 链表建立头插法链头乱码 我用简单的 链头插入法建立链表但链头里的内容是乱码 怎么回事 解决方案 值域没有赋值,或者结构体没有初始化

《数据结构与算法 C语言版》—— 2.3线性表的链式表示与实现

2.3线性表的链式表示与实现 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单.直观的公式来表示.然而,从另一方面来看,这个特点也造成了这种存储结构的弱点:在作插入或删除操作时,需移动大量元素.本节我们将讨论线性表的另一种表示方法--链式存储结构,其特点是用一组地址任意的存储单元存储线性表中的数据元素.由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表随机存取的特点

python数据结构树和二叉树简介_python

一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1)有且仅有一个特定的称为根(Root)的结点:(2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,-,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree). 二.二叉树的定义 二叉树是由n(n≥0)个结点组成的有限集合.每个结点最多有两个子树的有序树

浅谈PHP链表数据结构(单链表)_php实例

链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区) 规定:基本数据类型,一般放在栈区 复合数据类型,比如对象,放在堆区 定义一个类Hero 定义成员属性排名 $no 定义成员属性姓名 $name 定义成员属性昵称 $nickname 定义成员属性 $next,是一个引用,指向下一个Hero对象 定义构造函数,传递参数:

数据流程图和数据结构是需求分析中不可缺少的一环

需求分析活动要完成4项任务,分别是: 问题识别 评价和综合 形成规格说明 评审规格说明 这4项任务中,"问题识别"是要识别出用户提出软件需求要解决的问题;"评价和综合"是要评价数据信息的流程和数据结构,对软件功能逐步细化,阐明接口特性,揭示设计约束,并将其综合成一个总的用户问题的解法;"形成规格说明"和"评审规格说明",顾名思义,这里不再赘述. 这4个任务中,主要的需求分析活动集中在"评价和综合";而评价数

Java笔记:集合框架实现原理

这篇文章是对http://www.cnblogs.com/skywang12345/category/455711.html中java集合框架相关文章的一个总结,在此对原作者的辛勤整理表示感谢. Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collec