2022.2.6
双链表及其基本操作
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define length 100
#define ElemType int
typedef struct DLnode
{
ElemType data;
struct DLnode *next;
struct DLnode *prior;
}DLnode,*DlinkList;
bool InitList(DLnode **L){
(*L)=(DLnode*)malloc(sizeof(DLnode));
if(*L==NULL)
return false;
(*L)->next=NULL;
(*L)->prior=NULL;
(*L)->data=6;
return true;
}
//尾插法创表
bool CreateDlistR(DLnode **L){
DlinkList p=(*L);
DlinkList r=p;
int a;
printf("input elem,q to quit:\n");
while((scanf("%d",&a))==1){
DlinkList s=(DLnode *)malloc(sizeof(DLnode));
s->data=a;
r->next=s;
s->prior=r;
r=s;
}
r->next=NULL;
return true;
}
//插入结点算法 在p结点后插入s结点
bool InsertNextNode(DLnode *p,DLnode *s){
if(p==NULL||s==NULL)
return false;
s->next=p->next;
s->prior=p;
if(p->next!=NULL){ //p不是最后一个结点
p->next->prior=s;
}
p->next=s;
return true;
}
//删除p结点的后继结点
bool DeleteNextNode(DLnode *p){
if(p==NULL)
return false;
DLnode *q=p->next;
if(q->next!=NULL){ //q不为最后一个结点
q->next->prior=p;
}
p->next=q->next;
free(q);
return true;
}
//查找第一个值为x的结点并返回结点指针
DLnode * FindNode(DlinkList L,int x){
DLnode *s=L->next;
while(s!=NULL){
if(s->data==x)
return s;
else
s=s->next;
}
return NULL;
}
int main(){
DlinkList L;
InitList(&L);
}