⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkstruct.c

📁 linux环境下结合ncurse库
💻 C
字号:
/*
	链表结构 相关函数的实现
*/
#include"LinkStruct.h"



void InsertNode(Link * link ,void * pdata,int objecttype) // 插入元素
{
	NODE * pnode=CreateNode(pdata);
	pnode->typeflag=objecttype; // 类型标志赋值
	link->rearptr->next=pnode; // 最后一个指向新的
	pnode->prior=link->rearptr; // 新的一个指向最后一个

	// 循环 环节
	pnode->next=link->head;
	link->head->prior=pnode;
	link->rearptr=pnode; // 新插入的结点为最后一个结点。尾插法特性
	link->count++; // 结点计数器+1
}

void DestroyLink(Link * link) // 销毁链表
{
	NODE * q,* pDelnode=link->head->next; // 指向第一个结点并非头结点
	while (pDelnode!=link->head) // 当pDelnode  指向头结点时候,说明已经删除玩了
	{
		q=pDelnode->next;
		free(pDelnode);
		pDelnode=q;
	}
	link->rearptr=link->head; // 指向 头结点
	link->head->next=link->head->prior=link->head; // 空循环双链表时候,头结点的前驱后继指针指向自己
	free(link->head); // 把头结点也销毁掉
	link->count=0;
}

void LinkInit(Link * link) // 初始化链表
{
	NODE * pnode=(NODE *)malloc(sizeof(NODE));
	InitNode(pnode);
	link->head=link->rearptr=link->pcurrent=pnode;
	link->count=0;
	link->InsertNode=InsertNode;
	link->DestroyLink=DestroyLink;
}

void InitNode(NODE * pnode)
{
	pnode->prior=pnode->next=pnode;
	pnode->pdata=NULL;
}

NODE* CreateNode(void *pdata)
{
	NODE * pnode=(NODE *)malloc(sizeof(NODE));
	
	if(!pnode)
	{
		fprintf(stderr,"Error - malloc false ! exit program");
		endwin();
		exit(1);
	}
	InitNode(pnode);
	pnode->pdata=pdata;
	return pnode;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -