开头一句话,想要数据结构学的好,代码写的顺手,初学者应该在理解原理的基础上对链表的增删查改的功能进行背诵,以后遇到直接写出来,而不是去慢慢想,并且对新手来说,想的代码,大多数时漏洞百出,可能编译都通不过。
废话不多说,让我们来看一些具体的操作吧!
//创建结构体
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;
}
好了,这期就写到这,继续加油!!!