C语言-头插法-尾插法建单链表

C语言单链表

1、单链表定义

链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的也可以是不连续的。为了建立起数据元素之间的关系,对于每个数据元素除了存放数据元素自身的信息外,还必须有包含的指示该元素直接后继元素存储位置的信息,这两部分信息组成一个结点,即每个结点都有至少包括两个域,一个域存储数据元素信息,称为数据域,另一个域存储直接后继的地址,称为指针域。那么顾名思义,单链表即每个结点只有一个指针域。

单链表又有带头结点和不带头结点的单链表
带头结点的单链表,头指针head指向头结点,头结点的值域不包含任何信息,从头结点之后的结点开始存储信息。看个人编程习惯决定使用哪一种单链表。

不带头结点的单链表

带头结点的单链表

在这里插入图片描述

2、头插法建单链表

在这里插入图片描述
在这里插入图片描述
下面用代码完成:用头插法将“I love program”放至链表中,并输出验证结果。

代码
#include <stdio.h>
//程序名称:头插法建单链表 
//程序功能:用头插的方法建立、输出、释放单链表。
//代码编写者:黄
//时间:2019
 
#include <stdio.h>
#include <stdlib.h>

//定义全局变量MAX为14 
#define MAX 14

struct list    //描述节点 
{ 
	char string;
	struct list *next;
};
typedef struct list node;
typedef node *link;

char string[MAX]={'I',' ','l','o','v','e',' ','p','r','o','g','r','a','m'};  //数据库 

link create_list(link head)   //头插法建表 
{
	link newpointer;
	char ch;
	int i;
	
	head=(link)malloc(sizeof(node));//动态内存分配函数,大小为一个node结构体的大小 
	
	if(head==NULL)//判断是否分配成功 
 		printf("exit\n");
	  
    else
    {
        head->string=string[0];//将数据库的第一个数据赋给头指针的数据域 
    	head->next=NULL;//指针域置空 
		
		//将剩余的数据赋值 
		for(i=1;i<MAX;i++)
		{
			newpointer=(link)malloc(sizeof(node));
			if(newpointer==NULL)
	           printf("exit\n");
	           
	        else
		    {
                newpointer->string=string[i];//头插法的精髓 
    	        newpointer->next=head;
				head=newpointer;    	
        	}       
		}  
    }
    
    return head;//重:返回头指针 
}

void printf_list(link head)  //定义打印链表函数 
{ 
    link temp;
    temp=head;
    
	while(temp!=NULL)
	{
		printf("%c",temp->string);
			temp=temp->next;
	}
} 

void free_list(link head)  //定义一个释放链表函数 
{
	link temp;

	while(head!=NULL)
	{
		temp=head;
		head=head->next;
		free(temp);
	}
}

int main()
{
	link head;
	head = create_list(head);
	
	if(head!=NULL)
	{
		printf_list(head);
		free_list(head);
	}
	
	printf("\n");
	
	
	return 0;
}
输出

在这里插入图片描述

3、尾插法建单链表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面用代码完成:用尾插法将“I love program”放至链表中,并输出验证结果。

代码
#include <stdio.h>
//程序名称:尾插法建单链表 
//程序功能:用尾插的方法建立、输出、释放单链表。
//代码编写者:黄 
//时间:2019


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//定义全局变量MAX为14 
#define MAX 14

struct list    //描述节点 
{ 
	char string;
	struct list *next;
};
typedef struct list node;
typedef node* link;

char string[MAX]={'I',' ','l','o','v','e',' ','p','r','o','g','r','a','m'};//数据库 

link create_list(link head)   //尾插法建表
{
	link pointer,newpointer;
	int i;
	
	head=(link)malloc(sizeof(node));//动态分配内存 
	
	if(head==NULL)//判断是否分配成功 
		printf("exit\n");
	
	else
	{
		head->string=string[0];
		head->next=NULL;
		pointer=head;
		
		for(i=1;i<MAX;i++)
		{
			newpointer=(link)malloc(sizeof(node));
			
			if(newpointer==NULL)
   				printf("exit\n");
	        else
			{
				newpointer->string=string[i];//尾插法的精髓 
				newpointer->next=NULL;
				pointer->next=newpointer;
				
				pointer=newpointer;
			}      
		}
	}  
	return head;
}

void printf_list(link head)  //定义打印列表函数 
{ 
    link temp;
    temp=head;
    
	while(temp!=NULL)
	{
		printf("%c",temp->string);
		temp=temp->next;
	}
} 


void free_list(link head)  //定义一个释放链表函数 
{
	link temp;

	while(head!=NULL)
	{
		temp=head;
		head=head->next;
		free(temp);
	}
}

int main()
{
	link head;
	head=create_list(head);
	
	if(head!=NULL)
	{
		printf_list(head);
		free_list(head);
	}
	
	printf("\n");
	
	return 0;
}

输出

在这里插入图片描述

本文参考博文:
C语言单链表基本操作总结
单链表
CSDN字体格式(字体、颜色、大小)、背景色设置

  • 23
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值