c++中关于双向链表的问题
#ifndef _DoubleList_h_
#define _DoubleList_h_
#include <stdio.h>
#include <stdlib.h>
typedef struct DNode//节点的定义
{
int x;
struct DNode *prior,*next;
}DNode;
typedef struct Header//头节点的定义
{
int length;
DNode *next;
}Header;
Header Init_List()//初始化一个双向链表
{
Header header;
header.length = 0;
header.next = NULL;
return header;
}
Header ListInsert(Header &header,int i,DNode &e)//在位置i插入指定元素e
{
if(i>header.length)
{
printf("please input suit num");
}
DNode *current=(DNode*)&header;
int j = 0;
if (header.next == NULL)
{
header.next=&e;
e.next =NULL;
e.prior=NULL;
header.length ++;
return header;
}
else if (i == header.length)
{
e.next = NULL;
e.prior = current;
current->next = &e;
header.length ++;
return header;
}
else
{
for (j=0;j<i;i++)
{
current=current->next;
}
e= *(current->next->prior);
e.next = current->next ;
*(current->next)= e;
e.prior = current;
header.length++;
return header;
}
}
#endif
int main()
{
DNode n1,n2,n3,n4;
n1.x = 1;
n2.x = 2;
n3.x = 3;
Header N;
N=Init_List();
N=ListInsert(N,0,n1);
printf("%d\n",N.next->x);
N=ListInsert(N,1,n2);
printf("%d",N.next->next->x);
N=ListInsert(N,1,n3);
printf("%d",N.next->next->next->next );
}
在打印第二个数时出现Program received signal SIGSEGV, Segmentation fault求教
#define _DoubleList_h_
#include <stdio.h>
#include <stdlib.h>
typedef struct DNode//节点的定义
{
int x;
struct DNode *prior,*next;
}DNode;
typedef struct Header//头节点的定义
{
int length;
DNode *next;
}Header;
Header Init_List()//初始化一个双向链表
{
Header header;
header.length = 0;
header.next = NULL;
return header;
}
Header ListInsert(Header &header,int i,DNode &e)//在位置i插入指定元素e
{
if(i>header.length)
{
printf("please input suit num");
}
DNode *current=(DNode*)&header;
int j = 0;
if (header.next == NULL)
{
header.next=&e;
e.next =NULL;
e.prior=NULL;
header.length ++;
return header;
}
else if (i == header.length)
{
e.next = NULL;
e.prior = current;
current->next = &e;
header.length ++;
return header;
}
else
{
for (j=0;j<i;i++)
{
current=current->next;
}
e= *(current->next->prior);
e.next = current->next ;
*(current->next)= e;
e.prior = current;
header.length++;
return header;
}
}
#endif
int main()
{
DNode n1,n2,n3,n4;
n1.x = 1;
n2.x = 2;
n3.x = 3;
Header N;
N=Init_List();
N=ListInsert(N,0,n1);
printf("%d\n",N.next->x);
N=ListInsert(N,1,n2);
printf("%d",N.next->next->x);
N=ListInsert(N,1,n3);
printf("%d",N.next->next->next->next );
}
在打印第二个数时出现Program received signal SIGSEGV, Segmentation fault求教
...全文
相关推荐
cpp代码-双向循环链表-oj
标题 "cpp代码-双向循环链表-oj" 暗示了这是一个关于使用C++编程语言实现双向循环链表的项目,目标可能是为了解决在线编程挑战(Online Judge,简称oj)中的问题。
cpp代码-链表之报数问题-oj
本项目“cpp代码-链表之报数问题-oj”显然聚焦于使用C++解决一个与链表相关的在线编程挑战(oj,即Online Judge系统)。
约瑟夫环_双向链表(c++做的)
在约瑟夫环问题中,双向链表可以更好地模拟人们在圆圈中的顺序关系。下面我们将深入探讨如何使用C++实现约瑟夫环问题的双向链表解决方案:1.
VC++课程设计双向链表电话簿
通过阅读和理解这个源代码,学生不仅可以学习到C++编程的基本语法,还可以深入理解数据结构和算法,特别是双向链表的实现及其应用。这对于提高编程能力和解决实际问题的能力非常有帮助。
C++实现大数阶乘:双向链表的运用
双向链表是一种常见的数据结构,它允许数据在两个方向上进行扩展。每个节点由三个部分组成:数据域和两个指针域,分别指向前一个节点和后一个节点。与单向链表相比,双向链表提供了更灵活的操作,尤其是在数据需要频繁地向前或向后遍历时。双向链表的节点定义如下:在大数计算中,由于数字的位数可能非常多,双向链表可以有效地存储每一位数字,并且可以通过前后指针快速访问和修改相邻数字。溢出发生在程序试图存储比变量类型能容纳的更大数值时。在大数运算中,由于数值的大小远远超过了传统的数据类型(如int或long。


