Пример #1
0
//双链表的头部插入
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;
}
Пример #2
0
//双链表的尾部插入
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;
}
Пример #3
0
//双链表的中部插入
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;
}
Пример #4
0
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");
}
Пример #5
0
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");
}