链表之双链表的构造

   开头一句话,想要数据结构学的好,代码写的顺手,初学者应该在理解原理的基础上对链表的增删查改的功能进行背诵,以后遇到直接写出来,而不是去慢慢想,并且对新手来说,想的代码,大多数时漏洞百出,可能编译都通不过。
 废话不多说,让我们来看一些具体的操作吧!
//创建结构体
typedef struct Dlist{
int size;
struct Dlist *next;
struct Dlist *prev;
}DL;

```c
//初始化头节点
DL *buyDlist(x){
DL*newnode=(DL*)malloc(sizeof(DL));
newnode->size=x;
newnode->next=NULL;
newnode->prev=NULL;
return newnode;
//这里用了返回参数,所以不用用双指针。
}
//初始化
void initDlist(DL*ps){
DL*tail=buyDlist(0);
tail->next=tail;
tail->prev=tail;
return 0;
//哨兵位的头节点
}
//尾插
void pushbackDDlist(DL* ps,int x){
 DL* tail=ps->prev;
 DL* newnode=buyDlist(x);
 newnode->next=ps;
 newnode->prev=tail;
 tail->next=newnode;
 ps->prev=newnode;
}
//头插
void pushfrontDlist(DL*ps,int x){
DL* tail=ps->next;
DL* newnode=buyDlist(x);
ps->next=newnode;
newnode->next=tail;
tail->prev=newnode;
newnode->prev=ps;
}
//尾删
viod popbsckDlist(DL*ps){
DL*tail=ps->prev;
ps->prev=tail->prev;
tail->prev->next=ps;
free(tail);
}
//头删
void popfrontDlist(DL* ps){
DL* tail=ps->next;
ps->next=tail->next;
tail->prev->prev=ps;
free(tail);
tail=NULL;
}
//打印链表元素
void printDlist(DL* ps){
if(ps==NULL)
return;
else{
while(ps->next!=ps){
printf("%d",ps->size);
ps=ps->next;

}
}
}
//查找
DL* findDlist(DL*ps,int x){
DL* cur=ps->next;
while(cur!=ps){
if(cur->size==x)
return cur;
cur=cur->next;
]
rerutn;
}
//插入
void insertDlist(DL* ps,int x){
DL* newnode=buyDlist(x);
DL *tail=ps->prev;
tail->next=newnode;
newnode->prev=tail;
newnode->next=ps;
ps->prev=newnode
//这里时随意插入一个元素,由于链表只能顺序查找,随意不能像顺序表一样方便按照位置插入。
}
//销毁链表
void destoryDlist(DL *ps){
DL *tail=ps->next;
while(tail!=ps){
DL*cur=tail->next;
free(tail);
tail=cur;
}
free(phead);
phead=NULL;
}

//最后忘了写随机删除

//删除某个节点
void eraseDlist(DL*ps){
DL* tail=ps->prev;
DL* tail1=ps->next;
tail->next=tial1;
tail1->prev=tail;
free(ps);
ps=NULL;
}

好了,这期就写到这,继续加油!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向前走()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值