2.6 双链表使用头插尾插实现

#include <stdio.h>
#include <stdlib.h>

typedef struct DLNode {
	DLNode* next, * prior;
	int data;
}*DLinkList;

int main() {
	//初始化双链表
	DLinkList DL;

/*代码封装
	DL = (DLinkList)malloc(sizeof(DLNode));
	if (DL!=NULL){
		DL->next = NULL;
		DL->prior = NULL;
	}
*/
	bool InitDLNode(DLinkList & DL);
	InitDLNode(DL);

	//根据数组创建链表——头插法
	int data[6] = { 1,2,3,4,5,6 };

/*代码已封装
	DLNode* newDL;
	for (int i = 0; i < 6; i++)
	{
		newDL = (DLinkList)malloc(sizeof(DLNode));
		if (newDL != NULL)
		{
			newDL->data = data[i];
			newDL->next = DL->next;
			if (DL->next != NULL)DL->next->prior = newDL; 
			newDL->prior = DL;
			DL->next = newDL;
	
		}
	}
*/
	bool CreateDLinkListbyHeadInsert(DLinkList & DL, int data[], int length);
	CreateDLinkListbyHeadInsert(DL, data, 6);

	//尾插法
/*
	bool CreateDLinkListbyTailInsert(DLinkList & DL, int data[], int length);
	CreateDLinkListbyTailInsert(DL, data, 6);
*/

	//输出双链表
	void PrintDLinkList(DLinkList DL);
	PrintDLinkList(DL);
}

//初始化双链表
bool InitDLNode(DLinkList& DL) {
	DL = (DLinkList)malloc(sizeof(DLNode));
	if (DL == NULL) return false; 
	DL->next = NULL;
	DL->prior = NULL;
	return true;
}

//根据数组使用头插表——课本p37代码实现
bool CreateDLinkListbyHeadInsert(DLinkList &DL, int data[], int length) {
	DLNode* newDL;
	for (int i = 0; i < length; i++)
	{
		newDL = (DLinkList)malloc(sizeof(DLNode));
		if (newDL != NULL)
		{
			newDL->data = data[i];
			newDL->next = DL->next;
			if (DL->next != NULL)DL->next->prior = newDL;
			newDL->prior = DL;
			DL->next = newDL;

		}
	}
	return true;
}

//用尾插法(不常用)
bool CreateDLinkListbyTailInsert(DLinkList& DL, int data[], int length) {
	DLNode* p = DL, * newDL;
	for (int i = 0; i < length; i++)
	{
		newDL = (DLinkList)malloc(sizeof(DLNode));
		if (newDL!=NULL)
		{
			newDL->data = data[i];
			newDL->next = p->next;
			newDL->prior = p;
			p->next = newDL;
			p = p->next;
		}
	}
	return true;
}

//输出双链表
void PrintDLinkList(DLinkList DL) {
	DLNode* p;
	p = DL->next;
	while (p != NULL)
	{
		printf("%d\t", p->data);
		p = p->next;
	}
}
posted @   千树line  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示