双向链表的建立 -- C语言

代码实现

void dumpDoubList(st_doubNode * head){
	if(NULL == head){
		return;
	}

	st_doubNode * p = NULL;
	
	printf("========= Dump Double List %p ===========\n\t", head);
	p = head;
	while (NULL != p){
		printf(" %d ", p->data);
		p = p->next;
	}
	printf("\n");
	printf("===================================\n");
}


int createDoubList(st_doubNode ** phead, int * array, int size){

	if(NULL == array || size < 0){
		printf("%s: param error\n",__func__);
		return PARAM_ERR;
	}	

	if(0 == size){ /*没有数据,初始化个毛线*/
		return;
	}

	st_doubNode * head = * phead;
	st_doubNode * p = NULL, *q = NULL;
	int i = 0;

	/*分配并初始化头结点*/
	head = (st_doubNode * ) malloc (sizeof(st_doubNode));
	if(NULL == head){
		printf("%s: malloc error\n",__func__);
		return ALLOC_ERR;
	}	
	head->next = NULL;
	head->prev = NULL;

	p = head;	
	for(i = 0; i < size; i++){	
		/*首节点,未赋值*/
		if(NULL == head->next){
			p->data = array[i];
			/*这个做个小技巧,把next指向头自己,表示已经赋值了*/
			p->next = head; 
		} else {
			q = (st_doubNode * ) malloc (sizeof(st_doubNode));
			if(NULL == q){
				printf("%s: malloc error\n", __func__);
				return ALLOC_ERR;
			}	
			q->data = array[i];
			q->prev = p;
			q->next = NULL;
			p->next = q;
			p = q;
		}
	}
	
	*phead = head;

	return SUCCESS;
}


void testCreateDoubList(void){
	/*初始化input数据*/
	int input[10] = {22,32,19,53,0,47,29,116,4,6};
	gDoubHead = NULL;


	printf("************  testCreateDoubList ************ \n");

	createDoubList(&gDoubHead, input, 10);

	dumpDoubList(gDoubHead);

	return;
}

调试编译

gcc doublist.c listMain.c -DDEBUG -o a.exe

调试输出

************  testCreateDoubList ************
========= Dump Double List 0x1b65010 ===========
         22  32  19  53  0  47  29  116  4  6
===================================
发布了191 篇原创文章 · 获赞 43 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/leoufung/article/details/104373328