C语言实现链表(线性表)完整示例程序

这篇博客提供了C语言实现链表的完整示例,旨在帮助需要理解链表操作的读者。虽然作者幽默地提到自己要吃饭,但示例程序涵盖了线性表的基本概念和操作。

关于线性表的定义,在网上很容易找到或者应该都清楚。因此本篇目只给出一个示列程序。希望能够帮到有需要的人。

#include<stdio.h>
#include<stdlib.h>
//对链表结点结构进行定义 
typedef int DATA;			//定义结点数据类型为整型 
struct LINK_LIST			//定义链表结点格式 
{
	DATA data;				//数据域 
	LINK_LIST* next; 		//后继指针域 
};
typedef struct LINK_LIST ELEMENT;
typedef ELEMENT *LINK;

//链表的初始化 
LINK init_list()
{
	LINK head;								//创建头结点 
	head = (LINK)malloc(sizeof(ELEMENT));	//给头结点分配内存 
	head ->next=NULL;						//悬空后继指针域 
	return head; 							//返回头结点 
} 

//链表长度计算
int count_list(LINK head)					//传入头指针 
{												
	int cnt=0;								//设置在第一个结点时cnt为0 
	head = head->next;						//将指针指向后继元素 
	while(head!=NULL)						//检测head是否为空指针,若是则证明已经遍历到了最后一个元素,同时跳出循环。 
	{
		cnt++;
		head = head->next;					//不断将下一个节点的后继指针迭代给head 
	}
	return cnt;
 } 

//链表插值(在给定结点之前)
void insert_list(LINK head, int i,DATA data)
{
	LINK p;
	int j=0;
	while(head!=NULL&&j<i-1)			//寻找第i-1个结点 
	{
		head = head->next;
		j++; 
	} 
	if(head==NULL||j>i-1)
	printf("insert error!!!");
	else								//将目标元素插入到第i-1个元素之后 
	{
		p = (LINK)malloc(sizeof(ELEMENT));
		p->data = data;
		p->next = head->next;
		head->next = p;
	} 
} 

//访问链表元素的值
DATA *get_list(LINK head,int i)
{
	int j=1;
	head = head->next;
	while(head!=NULL&&j<i)
	{
		head = head->next;
		j++;
	}
	if(head!=NULL&&j==i)
	return &head->data;
	else return NULL;
} 
 
int main()
{
	ELEMENT *p = init_list();		//初始化一个空链表 
	insert_list(p, 1,12);			//将链表第一个结点设置为12
	insert_list(p, 2,13);			//将链表第二个结点设置为12
	insert_list(p, 2,555);			//将链表第二个结点插入数据555,原来的13向后移位变成第三个结点 
	printf("%d",*get_list(p,2));	//输出第二个结点的数据 
} 

其实是我肚子很饿,要去吃饭了😂。。。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值