数据结构----链表以及队列

一:单链表

(1)基本结构:

typedef int SLTDataType;
typedef struct SListNode
{
    SLTDataType data;          //存储的数据
    struct SListNode* next;    //下一个节点的指针
}SLTNode;

(2)特性:

物理结构:非线性                                              逻辑结构:线性

(3)单链表的基本功能以及实现

初始化与删除:void SListInit(SLTNode** pphead)   ;   vodi SListDestroy(SLTNode** pphead).

初始化:由于在进行初始化时要对于节点本身进行修改,所以我们要使用二级指针进行传参,以便可以去修改实参。

删除:对链表进行删除时,要对节点的空间进行一个一个的释放,也要传二级指针。在进行链表的删除时,从前往后逐次对节点的空间进行释放。

插入

PS:在进行插入时,创建新节点的步骤重复率高,可以单独写一个创建新节点的函数,简略代码。

SLTNode* NewNode(SLTDataType x)

           void  SListFrontPush(SLTNode** pphead , SLDataType x);   (头插)

在进行头插时,头结点的位置一直在改变,故传参也要二级指针,在进行插入时,要注意判断链表是否为空。

           void  SListBackPush(SLTNode** pphead ,SLDataType x);  (尾插)

在进行尾插时,头结点在链表为空的情况下,也要改变头结点的位置,故而也要传参二级指针

           void  SListPush(SLTNode* phead ,SLTNode* pure ,SLDataType x);   (任意位置插入)(要分前后)

在进行任意位置时,可以自定义一个函数进行获取该数据的地址

SLTNode* SLTNSituation(SLTNode* phead, SLTNode* pure,SLTDataType x)

在其之前进行插入:

在其之后进行插入:

删除:

void SListFrontDes(SLTNode** pphead );   (头删)

在进行头删时,头结点的位置会一直在变化,所以依旧需要传递二级指针

           voidSListBackDes(SLTNode* phead);  (尾删) 

           void  SListDes(SLTNode* phead ,SLTNode* p );   (任意位置删除)

二:队列

概念:以链表为基础的一种数据结构,遵循“先进先出”的原则。

typedef int QueueDataType;
typedef struct QListNode
{
    QueueDataType val;
    struct QueueNode* next;
}QNode;

// 队列的结构 
typedef struct Queue
{
    QNode* phead;      //方便找尾节点,降低时间复杂度
    QNode* ptail;
    int size;     //记录链表长度
}Queue;

队列的基本操作:

初始化与删除
void QueueInit(Queue* pq);


void QueueDestroy(Queue* pq);


出队列与入队列
void QueuePush(Queue* pq, QueueDataType x);


void QueuePop(Queue* pq);


出头节点与尾节点
QueueDataType QueueFront(Queue* pq);     返回该节点的数据


QueueDataType QueueBack(Queue* pq);


判断是否为空
bool QueueEmpty(Queue* pq);


打印队列
void QueuePrintf(Queue* pq);


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值