创建一个双向链表,将26个英文字母通过头插的方式插入到链表中通过尾删的方式将数据读取出来并删除。

	//创建一个双向链表,
typedef struct link
{
	char data;
	struct link* pre;
	struct link* next;
}node,*plink;
plink link_create();
plink link_node(char data);
int inset_head(char data,plink H);
int dele_tail(plink H);             //尾删且展示内容
int out_dblist(plink H);
int main(int argc, const char *argv[])
{
//创建头结点
plink H = link_create();
//将26个英文字母通过头插的方式插入到链表中
for(char data='z';data>='a';data--)
{
	inset_head(data,H);
}
//通过尾删的方式将数据读取出来并删除。
for(int i=0;i<26;i++)
{
	dele_tail(H);
}
	return 0;
}
plink link_create()    //创建头结点
{
	plink H = (plink)malloc(sizeof(node));
	H->data = 0;
	H->pre = NULL;
	H->next = NULL;
	return H;
}
plink link_node(char data)      //创建新结点
{
	plink new = (plink)malloc(sizeof(node));
	new->data = data;
	new->pre = NULL;
	new->next = NULL;
	return new;
}
int inset_head(char data,plink H)        //头插
{
	plink new = link_node(data);
	new->next = H->next;
	if(H->next != NULL)
	{
		H->next->pre = new;
	}
	H->next = new;
	new->pre = H;
	return 0;
}
int dele_tail(plink H)             //尾删且展示内容
{
	if(H->next == NULL)
	{
		printf("链表为空无需删除\n");
		return -1;
	}
	plink T = H;
	while(T->next !=NULL)
	{
		T = T->next;
	}
	printf("%c\n",T->data);
	T->pre->next = T->next;
	
	free(T);
	T = NULL;
	return 0;
}

你可能感兴趣的:(链表,数据结构)