2023.10.01

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

功能函数封装:

#include
typedef struct link{
	char data;
	struct link* next;
	struct link* hould;
}Node,*pNode;
//头结点创建
pNode build_head()
{
	pNode H=(pNode)malloc(sizeof(Node));
	H->next=NULL;
	H->hould=NULL;
	return H;
}
//新节点创建并插入(头插)
pNode build_new(pNode H,char data)
{
	pNode new=(pNode)malloc(sizeof(Node));
	new->data=data;
	new->next=H->next;
	if(H->next!=NULL)
		H->next->hould=new;
	H->next=new;
	new->hould=H;
	if(H->next!=NULL){
		H->next->hould=new;
	}
	return new;
}
//循环到尾部
pNode tail_del(pNode H)
{
	pNode p=H->next;
	if(NULL==p){
		return NULL;
	}else{
		while(p->next!=NULL){
			p=p->next;
		}
		return p;
	}
}

主函数实现:

#include "001_funnc.c"
int main(int argc, const char *argv[])
{
	//申请头结点
	pNode H=build_head();
	char i='a';
	//循环插入数据
	for(i='a';i<='z';i++){
		pNode new=build_new(H,i);
		//printf("%c->",new->data);
	}
	//putchar(10);
	//输出并删除尾节点
	for(int i=0;i<26;i++){
		pNode p=tail_del(H);
		printf("%c->",p->data);
		p->hould->next=NULL;
		free(p);
	}
	putchar(10);
	return 0;
}

你可能感兴趣的:(学习)