本帖最后由 163585580 于 2021-5-6 18:12 编辑
这是双链表的代码,有个问题;
main函数里的最后一个print()执行不了,搞不清楚是什么原因
[C++] 纯文本查看 复制代码 //// 双链表的全部
//
#include "demo7.h"
#include <stdio.h>
#include <malloc.h>
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode,*DLinkList;
//初始化双链表
bool InitDLinkList(DLinkList &L){
L=(DNode *)malloc(sizeof(DNode));
if(L==NULL){
return false;
}
L->prior=NULL;
L->next=NULL;
return true;
}
//在p结点后插入s结点
bool InsertNextDNode(DNode *p,DNode *s){
if(p==NULL||s==NULL){
return false;
}
s->next=p->next;
if(p->next!=NULL){
p->next->prior=s;
}
s->prior=p;
p->next=s;
return 0;
}
//删除某个结点
bool DeleteNextNode(DNode *p){
if (p==NULL){
return false;
}
DNode *q=p->next;
if(q==NULL){
return false;
}
p->next=q->next;
if(q->next!=NULL){
q->next->prior=p;
}
free(q);
return false;
}
//销毁栈
void Destorylist(DLinkList &L){
while (L->next!=NULL){
DeleteNextNode(L);
}
free(L);
L=NULL;
}
//双链表的遍历
void print(DLinkList &L){
L=L->next;
while(L!=NULL){
printf("%d\n",L->data);
L=L->next;
}
}
//单链表的查找
DNode *GetElem(DLinkList L,int i){
if (i<0){
return NULL;
}
DNode *p;
int j=0;
p=L;
while (p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
//尾插法建立单链表,插到它的后面(按位序插入也是这个代码)
bool ListInsert(DLinkList &L, int i,int e){
if (i<1){
return false;
}
DNode *p;
int j=0;
p=L;
//找到第i-1个结点
while (p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
return false;
}
DNode *s=(DNode *)malloc(sizeof(DNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
int main(){
DLinkList L;
InitDLinkList(L);
ListInsert(L,1,12);
ListInsert(L,2,21);
ListInsert(L,3,15);
ListInsert(L,4,63);
ListInsert(L,5,42);
ListInsert(L,6,390);
ListInsert(L,8,4000);
DNode *c,*d,*h;
DNode *m;
c=GetElem(L,2);
d=GetElem(L,8);
h=GetElem(L,5);
DeleteNextNode(h);
print(L);
printf("第一部分完成\n");
InsertNextDNode(c,d);
printf("第二部分完成,\n");
print(L);//这个函数执行不了,请问是什么原因?
} |