链表花式创建.......

写这篇博客的原因是因为接触了链表后发现她的头插尾插非常神奇啊(kanbudong)!!!所以在查了一些博客搜集了一些通俗易懂的头插尾插方法在此总结!!!

头插!

头插就是不断地往头指针后面插入结构体已构成链表废话不多说上代码!

typedef struct Node{//定义结构体 
	int data;
	struct Node *next;
}Lnode,*Linklist;
Linklist Creat_list(Linklist head){
	head=(Linklist)malloc(sizeof(Lnode));//给头指针开辟空间
	Lnode*node=NULL;//定义一个节点
	int n=4;
	head->next=NULL;
	//这里很重要 
	node=head->next;///将最后一个节点指针永远保持为NULL 
	for(int i=0;i<4;i++){
		node=(Linklist)malloc(sizeof(Lnode));//给节点申请空间
		node->data=i;
		node->next=head->next;//记住这是头插,始终往头后面插入 
		head->next=node;
	} 
}
//我学习的时候经常看见有的代码光有函数没主函数,我这人笨,没主函数不会调用
//所以这里把主函数也加上!!!!!
int main(){
	Linklist head=NULL;
	head=Creat_list(head);//头插 
	Illustrate(head);//输出函数后面说
	return 0;
}

头插法其实在我目前来看不怎么用,你看哈这里代码输出为3210!也就是反着来的~要是按照输入顺序输出就不能用头插了(个人认为)所以重点来了(往下看)

尾插!

我所了解到的有两种尾插,一个带表头,一个不带表头!还是直接上代码!

//这里是不代表头的!!!
//函数的意思是在链表中存数字和字符串到输入零的时候停止
typedef struct num{
	int data;
	char name[20];
	struct num *next;
}NUM, *linklist;
linklist input_list(){
	int n;
	linklist head,p,end;
	head=end=NULL;//记得呀指针都要提前赋值
	p=(linklist)malloc(sizeof(NUM));//开个p
	scanf("%d",&p->data);
	while(p->data!=0){
		scanf("%s",p->name);
		if(head==NULL){
			head=p;
			head->next=NULL;
		}
		if(end!=NULL){
			end->next=p;
		}
		end=p;
		p->next=NULL;
		p=(linklist)malloc(sizeof(NUM));
		scanf("%d",&p->data);
	}
	return head;
}void output_list(linklist head){//带表头和不带表头的输出函数不一样哟!
	linklist q=head;
	while(q){
	printf("%d %s\n",q->data,q->name);
	q=q->next;
}
}
int main(){
	linklist head;
	head=input_list();
	output_list(head);
	return 0;
} 

带不带表头…的其实我也不知道好与坏就具体情况具体用呗!

//这里是带上表头的写法
//函数意思是输出1234;
typedef struct Node{//定义结构体 
	int data;
	struct Node *next;
}Lnode,*Linklist;
Linklist creat_list(Linklist head){
	head=(Linklist)malloc(sizeof(Lnode));//给头结点申请空间
	Lnode*node=NULL;//定义节点 
	Linklist end=NULL;//定义尾节点 
	head->next=NULL;//指针得有值 
	end=head; 
	for(int i=0;i<4;i++){
		node=(Linklist)malloc(sizeof(Lnode));
		node->data=i;
		end->next=node;
		end=node;
	}
	end->next=NULL;
	return head ;
}
void output_list(Linklist head){
	Linklist tem=head;
	while(tem->next!=NULL){
		tem=tem->next;
		printf("%d\n",tem->data);
	}
}
//主函数和上面差不多就不写了

总而言之,链表的创建还是很简单的…建议看着代码在纸上画一画,画一画就出来了!!!理解一下就很好记忆了!!!(以上!敬礼!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值