//双链表的头部插入 bool InsertDHead(HEAD *phead, int val) { if (phead->data > phead->size) { phead->arr = (int **)realloc(phead->arr, sizeof(int *)* phead->size * 2); phead->size = phead->size * 2; printf("再次申请\n"); } DNODE *tmp = (DNODE *)malloc(sizeof(DNODE)); //printf("0x%p ", tmp); int k = phead->data; while (k) { phead->arr[k] = phead->arr[k - 1]; k--; } phead->arr[0] = (int *)tmp; printf("10x%p ", phead->arr[0]); phead->data++; InitDList(tmp); tmp->data = val; tmp->next = phead->next; if (!IsDEmpty(phead)) { phead->next->prev = tmp; } tmp->prev = (DNODE *)phead; phead->next = tmp; return true; }
//双链表的尾部插入 bool InsertDTail(HEAD *phead, int val) { if (phead == NULL) { return false; } if (phead->data > phead->size) { phead->arr = (int **)realloc(phead->arr, sizeof(int *)* phead->size * 2); phead->size = phead->size * 2; printf("再次申请\n"); } DNODE *tmp = (DNODE *)malloc(sizeof(DNODE)); phead->arr[phead->data++] = (int *)tmp; InitDList(tmp); DNODE *p = (DNODE *)phead; tmp->data = val; while (p->next != NULL) { p = p->next; } tmp->prev = p; p->next = tmp; return true; }
//双链表的中部插入 bool InsertDByPos(HEAD *phead, int pos, int val) { if (phead == NULL || pos<1 || pos>phead->data) { return false; } if (phead->data > phead->size) { phead->arr = (int **)realloc(phead->arr, sizeof(int *)* phead->size * 2); phead->size = phead->size * 2; printf("再次申请\n"); } DNODE *tmp = (DNODE *)malloc(sizeof(DNODE)); printf("0x%p ", tmp); int k = phead->data; while (k >= pos) { phead->arr[k] = phead->arr[k - 1]; k--; } phead->arr[k] = (int *)tmp; InitDList(tmp); DNODE *p = (DNODE *)phead; tmp->data = val; while (pos--) { p = p->next; } tmp->prev = p->prev; tmp->next = p; p->prev->next = tmp; p->prev = tmp; return true; }
void main_MergeDLink(){ DLinkList A,B; int n; int pos; char e; InitDList(&A); printf("请输入链表A的元素个数:"); scanf("%d",&n); getchar();//接收换行 CreateDList(A,n); printf("链表A中的元素:"); PrintDList(A); InitDList(&B); printf("请输入链表B的元素个数:"); scanf("%d",&n); getchar();//接收换行 CreateDList(B,n); printf("链表B中的元素:"); PrintDList(B); MergeDLink(A,B); printf("链表A和B合并后的元素:"); PrintDList(A); system("pause"); }
void main_DLinkList(){ DLinkList h; int n; int pos; char e; InitDList(&h); printf("输入元素个数:"); scanf("%d",&n); getchar();//接收换行 CreateDList(h,n); printf("链表中的元素:"); PrintDList(h); printf("请输入插入的元素及位置:"); scanf("%c",&e); getchar(); scanf("%d",&pos); InsertDList(h,pos,e); printf("插入元素后链表中的元素:"); PrintDList(h); system("pause"); }