带头结点双向链表的操作(2)

        此次代码为对带头结点双向链表部分操作的函数实现:

程序代码:

//对带头结点双向链表进行按元素删除

void DLinklistErase(DLinkNode** head,DLinkType value){
DLinkNode * cur = (*head)->next;
while(cur->data!=value&&cur!=(*head)){
cur = cur->next;
}
if(cur == (*head)){
return;
}else{
cur->prev->next = cur->next;
cur->next->prev = cur->prev;
}
}

//对带头结点的双向链表进行按位置删除
void DLinkListRemove(DLinkNode** head,DLinkNode * pos){
DLinkNode* cur = (*head)->next;
while(cur != pos&&cur!=(*head)){
cur = cur->next;
}
if(cur == (*head)){
return;
}else{
cur->prev->next = cur->next;
cur->next->prev = cur->prev;
}
}

//将带头结点的双向链表的元素全部删除
void DLinkListRemoveAll(DLinkNode** head){
DLinkNode* cur = (*head);
while(cur->next != (*head)){
DLinkListPopFront(head);
}
}

//求带头结点的双向链表的结点个数
size_t DLinkListSize(DLinkNode* head){
size_t count=0;
if(head->next == head){
return count;
}
DLinkNode* cur = head->next;
while(cur!= head){
count++;
cur = cur->next;
}
return count;
}

//将带头结点的双向链表置空
void DLinkListEmpty(DLinkNode** head){
if(head == NULL){
return;
}
if((*head)->next == (*head)){
return;
}
DLinkNode* cur = (*head);
while(cur->next != (*head)){
DLinkListPopFront(head);
}
}

检测代码:

void textDLinkListEmpty(){
DLinkNode* head = (DLinkNode*)malloc(sizeof(DLinkNode));
DLinkListInit(&head);
    DLinkListPushBack(&head, 'a');
DLinkListPushBack(&head, 'b');
DLinkListPushBack(&head, 'c');
DLinkListPushBack(&head, 'd');
DLinkListEmpty(&head);
PrintLinkList(head,"DLinkListEmpty");
}
void textDLinkListSize(){
DLinkNode* head = (DLinkNode*)malloc(sizeof(DLinkNode));
DLinkListInit(&head);
    DLinkListPushBack(&head, 'a');
DLinkListPushBack(&head, 'b');
DLinkListPushBack(&head, 'c');
DLinkListPushBack(&head, 'd');
size_t ret = DLinkListSize(head);
printf("\n****DLinkListSize***********\n");
printf("%d\n",ret);
}
void textDLinkListRemoveAll(){
DLinkNode* head = (DLinkNode*)malloc(sizeof(DLinkNode));
DLinkListInit(&head);
    DLinkListPushBack(&head, 'a');
DLinkListPushBack(&head, 'b');
DLinkListPushBack(&head, 'c');
DLinkListPushBack(&head, 'd');
DLinkListRemoveAll(&head);
PrintLinkList(head,"DLinkListRemoveAll");
}


void textDLinkListRemove(){
DLinkNode* head = (DLinkNode*)malloc(sizeof(DLinkNode));
DLinkListInit(&head);
    DLinkListPushBack(&head, 'a');
DLinkListPushBack(&head, 'b');
DLinkListPushBack(&head, 'c');
DLinkListPushBack(&head, 'd');
DLinkListRemove(&head,head->next);
PrintLinkList(head,"DLinkListRemove");
}
void textDLinklistErase(){
DLinkNode* head = (DLinkNode*)malloc(sizeof(DLinkNode));
DLinkListInit(&head);
    DLinkListPushBack(&head, 'a');
DLinkListPushBack(&head, 'b');
DLinkListPushBack(&head, 'c');
DLinkListPushBack(&head, 'd');
DLinklistErase(&head,'a');
PrintLinkList(head,"DLinkListErase");
}
//主函数
int main(){
textDLinkListPushBack();
textDLinkListPopBack();
textDLinkListPushFront();
textDLinkListPopFront();
textDLinkListFind();
textDLinkListInsert();
textDLinkListInsertAfter();
textDLinklistErase();
textDLinkListRemove();
textDLinkListRemoveAll();
textDLinkListSize();
textDLinkListEmpty();
}

检测结果:

[chaiyandong@localhost shujujiegou]$ ./dlinklist1


*********DLinkListPushBack*************
a b c d 


*********DLinkListPopBack*************
a b c 


*********DLinkListPushFront*************
d c b a 


*********DLinkListPopFront*************
b c d 


*******DLinkListFind***********
expect:1 actual:1


*********DLinkListInsert*************
z a b c d 


*********DLinkListInsert*************
a z b c d 


*********DLinkListErase*************
b c d 


*********DLinkListRemove*************
b c d 


*********DLinkListRemoveAll*************




****DLinkListSize***********
4


*********DLinkListEmpty*************


你可能感兴趣的:(数据结构)