功能:增删
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef int ElemType;
typedef struct D_LinkList {
ElemType data;
struct D_LinkList *prior, *next;
} D_LinkList, *PD_LinkList;
PD_LinkList init() {
PD_LinkList head = (PD_LinkList)malloc(sizeof(D_LinkList));
if (head == NULL) return 0;
head->next = head->prior = NULL;
return head;
}
void addElem(PD_LinkList list, int index, ElemType *data) {
if (list == NULL && data == NULL && index < 1) return;
int i_num = 0;
PD_LinkList list_temp = list;
while (list_temp != NULL && i_num < index - 1) {
list_temp = list_temp->next;
i_num++;
}
PD_LinkList add_elem = (PD_LinkList)malloc(sizeof(D_LinkList));
if (add_elem == NULL) return;
memcpy(&add_elem->data, data, sizeof(ElemType));
add_elem->next = list_temp->next;
add_elem->prior = list_temp;
if (add_elem->next != NULL)
add_elem->next->prior = add_elem;
list_temp->next = add_elem;
}
void deleteElem(PD_LinkList list, int index) {
if (list == NULL && index < 1) return;
int i_num = 0;
PD_LinkList list_temp = list;
while (list_temp != NULL && i_num < index - 1) {
list_temp = list_temp->next;
i_num++;
}
if (list_temp->next == NULL) return;
PD_LinkList dele_elem = list_temp->next;
list_temp->next = list_temp->next->next;
if (list_temp->next != NULL)
list_temp->next->prior = list_temp;
free(dele_elem);
}
void printElem(PD_LinkList list) {
if (list == NULL) return;
printf("{");
PD_LinkList print_elem = list;
while (print_elem->next != NULL) {
print_elem = print_elem->next;
printf("[%d]", print_elem->data);
}
printf("}\n");
if (print_elem->next == NULL) printf("tmpHead->next null\n");
printf("{");
while (print_elem->prior != NULL) {
printf("[%d]", print_elem->data);
print_elem = print_elem->prior;
}
printf("}\n");
if (print_elem->prior == NULL) printf("tmpHead->prior null\n");
}