数据结构与算法——线性表—单向链表操作(含代码)

3.2 单向链表
顺序表适用于不常进行插入或删除的操作,链表插入和删除非常高效,但访问不是很方便。
线性表的链式存储的特点是用一组任意的存储单元存储线性表的数据元素(可连续,可不连续)。
3.2.1 单链表和指针
结点中存储数据元素的域称为数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)
在这里插入图片描述
/***********************************************************************************************************************

[单链表操作]

[1] destroyList, 销毁单链表

[2] initList, 初始化一个带头结点的空单链表,如果传入一个不为空的单链表,将被重置

[3] insertElem, 在单链表中第 i 个位置插入元素 elem

[4] removeElem, 在单链表中移除第 pos 个元素,并由 elem 返回其值

[5] createList, 根据数组 elems 构建一个单链表

[6] isEmptyList, 判断单链表是否为空

[7] getElem, 获取单链表上位置为 pos 的元素

[8] locateElem, 获取元素 elem 在单链表上第一次出现的位置,如果不存在返回 -1

[9] getLength, 获取单链表长度

[10] printList, 打印整个单链表

[11] reverseList, 反转单链表

***********************************************************************************************************************/
LinkList.h

#pragma once
#include <iostream>
using namespace std;

#define MAXSIZE 5;
typedef int ElemType;

typedef struct LNode
{
   
	ElemType data;
	LNode *next;

}LNode;//主要分号的位置上,还有一种写法: //LNode, *LinkList;

void destroyList(LNode* &pHead)
{
   
	//方式1,间隔切断链表
	//LNode* p = pHead;
	//LNode* q = NULL;

	//while (p && p->next)
	//{
   
	//	q = p->next;
	//	p = q->next;

	//	free(q);	
	//	q = NULL;
	//}

	//free(pHead);
	//pHead = NULL;

	//方式2 依次摧毁
	if (pHead == NULL)
	{
   
		return;
	}

	LNode* p = NULL;
	while (pHead)//画结点图就很清楚了
	{
   
		p = pHead->next;
		free(pHead);
		pHead = p;
	}


}

void initList(LNode * &pHead)
{
   
	if (pHead != NULL)
	{
   
		destroyList(pHead);
	}

	

	LNode* p = (LNode*)malloc(sizeof(LNode));//sizeof(LNode) == 8
	p->data = 1;
	p->next = NULL;

//cout << sizeof(p) << sizeof(p->data) << sizeof(p->next) << sizeof(LNode);//32位:4 4 4 8 。64位:8 4 8 16。

	pHead = p;

}
void creatList(LNode* &pHead,const ElemType a[], const int len)
{
   
	if (pHead == NULL)
	{
   
		return;
	}

	LNode *q = pHead;
	LNode *p = NULL;

	for (int i = 0; i < len; ++i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值