内存管理,链表

数组和链表的区别 

1.数组:
    1.数组是有限个元素的集合
    2.数组的空间必须连续 
    3.数组的插入和删除效率低

2.链表: 
    1.链表空间不需要连续
    2.链表元素个数没有上限 
    3.链表存储空间变大
    4.单向链表、双向链表、内核链表、循环链表
    5.插入和删除效率很高

链表

  链表节点分为两个域

      数据域:存放各种实际的数据data

      指针域:存放下一节点的首地址 pnext

最后一个节点的指针域为NULL

 链表的节点类型

/* 链表节点类型 */
typedef struct node 
{
	int data;								//数据域
	struct node *pnext;						//地址域(下一个节点的地址)
}LinkNode;

创建一个空的单向有头链表 

/******************************************
 *函数名:CreateLinkList
 *功  能:
 *		创建一个空单向有头链表
 *参  数:
 *      缺省
 *返回值:
 *		成功返回头结点地址 
 *		失败返回NULL
 *注意事项:
 * 
 ******************************************/
LinkNode *CreateLinkList(void)
{
	LinkNode *pTmpNode = NULL;

	//1.申请空间 
	pTmpNode = malloc(sizeof(LinkNode));
	if (NULL == pTmpNode)
	{
		return NULL;
	}

	//2.对每个成员赋初值
	pTmpNode->pnext = NULL;

	return pTmpNode;
}

链表插入元素(头插法) 

/******************************************
 *函数名:InsertHeadLinkList
 *功  能:
 *		单向链表头插法插入元素
 *参  数:
 *		phead:链表头结点地址 
 *		tmpdata:插入数据
 *返回值:
 *		成功返回0 
 *		失败返回-1
 *注意事项:
 * 
 ******************************************/
int InsertHeadLinkList(LinkNode *phead, int tmpdata)
{
	LinkNode *pTmpNode = NULL;

	//1.申请存放数据的空间
	pTmpNode = malloc(sizeof(LinkNode));
	if (NULL == pTmpNode)
	{
		return -1;
	}

	//2.数据存进去
	pTmpNode->data = tmpdata;
	
	//3.地址域赋值为空白节点的pnext
	pTmpNode->pnext = phead->pnext;

	//4.空白节点的pnext指向新申请节点 
	phead->pnext = pTmpNode;
	
	return 0;
}

遍历链表所有节点 

(定义一个新的指针指向头结点,从头结点开始向后遍历,只要p!=NULL,p就等于p->pnext)

/******************************************
 *函数名:ShowLinkList
 *功  能:
 *		打印链表中所有节点的数据
 *参  数:
 *		phead:链表头结点地址 
 *返回值:
 *		缺省
 *注意事项:
 * 
 ******************************************/
void ShowLinkList(LinkNode *phead)
{
	LinkNode *p = NULL;

	p = phead->pnext;
	while (p != NULL)
	{
		printf("%d ", p->data);
		p = p->pnext;
	}
	printf("\n");

	return;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值