赞
踩
因为顺序表的底层空间是连续的,所以如果对元素进行大量的任意位置添加或删除,在顺序表里就要移动大量的元素,效率很低,因此我们需要让元素存储在不连续的空间中,但如果直接存储,就不知道它的下一个元素是什么,这时就可以利用链表这个结构
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的链接次序实现(除了存储元素信息外,还要给下一个节点的位置)
找到第一个节点,就可以通过链式结构找到下一个节点
链表:
1.单链表(从前往后)、双链表(循环)
2.带头(链表中第一个节点的不存储有效数据)
不带头(一个节点存储有效数据)
3.循环、非循环
下面来实现下不带头结点的单项非循环链表
SList.h文件
#pragma once #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<malloc.h> //无头单项非循环 //不带头结点,第一个结点存的是有效元素 typedef int SDataType; //节点的结构 typedef struct SListNode { SDataType _data;//保存数据 struct SListNode* _pNext;//指向下一个 节点的地址 }Node; //链表的结构 //把链表记录下来,只要知道头节点就行 typedef struct SList { Node* _pHead; }SList,*PSList; void SListInit(PSList pl);//初始化 void SListDestory(PSList pl);//销毁 Node* BuySListNode(SDataType data); void SListPushBack(PSList pl, SDataType data);//尾插 void SListPopBack(PSList pl);//尾删 void SListPushFront(PSList pl, SDataType data);//头插 void SListPopFront(PSList pl);//头删 Node* SListFind(PSList pl, SDataType data);//找位置 void SListInsert(PSList pl, Node* pos, SDataType data);//任意位置插入 void SListErase(PSList pl, Node* pos);//任意位置删除 void SListIsFindData(PSList pl, SDataType data);//检测data是否在链表中 void SListRemove(PSList pl, SDataType data);// 移除链表中第一个值为data的元素 //void SListRemoveAll(PSList pl, SDataType data);// 移除链表中所有值为data的元素 void SListSize(PSList pl); 获取链表有效元素个数 void SListCapacity(PSList pl);// 获取链表的容量 int SListEmpty(PSList pl);// 检测链表是否为空 SDataType SListFront(PSList pl);// 获取链表中第一个元素 SDataType SListBack(PSList pl);// 获取链表中最后一个元素 /// void PrintSList(PSList pl); // void SListTest();
SList.c文件
#include "SList.h" void SListInit(PSList pl)//初始化 { assert(pl); pl->_pHead = NULL; } Node* BuySListNode(SDataType data)//获取新结点 { Node* pNode = (Node*)malloc(sizeof(Node)); if (pNode == NULL) { assert(0); return NULL; } pNode->_data = data; pNode->_pNext = NULL; return pNode; } void SListPushBack(PSList pl, SDataType data)//尾插 { Node* pNewNode = NULL;//新结点 Node* pCur = NULL;//链表最后一个结点 assert(pl); pNewNode = BuySListNode(data
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。