C++简单单向链表实现-创新互联

#include "pch.h"
#include 


//创建链表
typedef struct ListTable 
{
	int nElement;    //链表元素
	int nSequence;   //节点序号
	ListTable *pNext;//下一个节点
}ListTable;


//初始化链表
//参数:元素的值
ListTable* initListTable(int nNum)
{
	//头结点
	ListTable *head;
	//申请内存
	head = (ListTable*)malloc(sizeof(ListTable));
	//初始化成员变量
	head->nElement = nNum;
	head->nSequence =1;
	head->pNext = NULL;
	//返回头结点指针
	return head;
}


//插入元素
//参数:链表指针 元素的值
void insertElement(ListTable *list, int nNum)
{
	//创建局部变量
	ListTable *pList = list;
	int nCount = list->nSequence;
	//申请新的节点空间
	ListTable *pNode = (ListTable*)malloc(sizeof(ListTable));
	//遍历链表
	while (pList != NULL)
	{
		//如果下一个节点为空,则插入元素
		if (pList->pNext ==NULL)
		{
			pList->pNext = pNode;
			pNode->nSequence = nCount + 1;
			pNode->nElement = nNum;
			pNode->pNext = NULL;
			return;
		}
		nCount += 1;
		pList = pList->pNext;
	}
}


//删除指定序号元素
//参数:链表指针  元素序号
void deleteElement(ListTable *list,int nSequence)
{
	//如果是第一个节点,直接free
	if (list->nSequence == nSequence)
	{
		free(list);
		return;
	}

	//创建局部变量
	ListTable *pList = list;
	ListTable *pTmp=NULL;
	
	//遍历链表
	while (pList!=NULL)
	{
		//如果序号相等,删除指定序号元素
		if (pList->pNext->nSequence == nSequence)
		{
			pTmp = pList->pNext->pNext;
			free(pList->pNext);
			pList->pNext = pTmp;
			//之后的序号依次减一
			while (pTmp != NULL)
			{
				pTmp->nSequence -= 1;
				pTmp = pTmp->pNext;
			}
			return;
		}
		pList = pList->pNext;	
	}
	printf("节点不存在!\n");
}


//修改元素
//参数:链表指针  元素序号  元素的值
void changeElement(ListTable *list, int nSequence,int nNum)
{
	ListTable *pList = list;
	while (pList != NULL)
	{
		if (pList->nSequence == nSequence)
		{
			pList->nElement = nNum;
			return;
		}
		pList = pList->pNext;
	}
	printf("节点不存在!\n");
}


//释放链表
//参数:链表指针
void deleteListTable(ListTable *list)
{
	ListTable *pList = list;
	ListTable *pTmp=NULL;
	while (pList != NULL)
	{
		pTmp= pList->pNext;
		free(pList);
		pList = pTmp;
	}
	printf("释放完成!\n");
}


//遍历链表元素
//参数:链表指针
void showElement(ListTable *list)
{
	ListTable *pList = list;
	if (pList == NULL)
	{
		printf("链表为空!\n");
		return;
	}
	while (pList != NULL)
	{
		printf("链表元素:%d  元素序号:%d\n", pList->nElement, pList->nSequence);
		pList = pList->pNext;
	}
}


int main()
{
	//初始化链表 第一个元素为1
	ListTable *list= initListTable(1);
	//插入2,3,4,5四个元素
	insertElement(list, 2);
	insertElement(list, 3);
	insertElement(list, 4);
	insertElement(list, 5);
	//修改序号5的元素为6
	changeElement(list, 5, 6);
	//删除序号为3的元素
	deleteElement(list, 3);
	//遍历
	showElement(list);
	//释放
	deleteListTable(list);
}

vs2017编译

成都创新互联公司主营福安网站建设的网络公司,主营网站建设方案,成都app软件开发,福安h5微信小程序搭建,福安网站营销推广欢迎福安等地区企业咨询

C++简单单向链表实现

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:C++简单单向链表实现-创新互联
URL标题:http://pwwzsj.com/article/phhip.html