无序单链表的首部,尾部,指定位置的插入,删除,查找等函数

这篇博客介绍了如何在无序单链表中实现头部、尾部以及指定位置的元素插入、删除和查找操作。通过示例代码详细阐述了这些基本操作的实现过程,包括在C语言中的函数定义和测试方法。
摘要由CSDN通过智能技术生成

头文件:linklist.h

#ifndef __LINKLIST_H__

#define __LINKLIST_H__

#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>


typedef int DataType;

//单链表的类型:每个节点包含一个数据和一个指针,指针指向下一个节点
typedef struct Node
{
    struct Node *pnext;
    DataType date;
}Node, *PNode;



//初始化单链表
void InitSeqList(PNode *pHead);

//删除一个非尾节点
void DeleteNotTail(PNode pos);

// 尾插
void PushBack(PNode *pHead, DataType data);
// 尾删
void PopBack(PNode *pHead);

// 打印顺序表
void PrintSeqList(PNode pHead);

// 头插
void PushFront(PNode *pHead, DataType data);

// 头删
void PopFront(PNode *pHead);


// 在顺单链表中查找元素data
PNode Find(PNode pHead, DataType data);

// 删除单链表中pos位置上的元素
void Erase(PNode *pHead, PNode pos);

//移除单链表中的元素data
void Remove(PNode *pHead, DataType data);

// 移除单链表中所有元素data
void RemoveAll(PNode *pHead, DataType data);


//从尾到前打印所有元素
void printfFromTailToHead(PNode pHead);

//在指定位置插入指定值的节点
void Insert(PNode* pHead, PNode pos, DataType data);

//查找中间元素
PNode FindMid(PNode pHead);

//在单链表的一个非头节点前插入一个节点(不遍历单链表)
void InsertNotHeadNode(PNode pos, DataType data);

//////////////////////面试题//////////////////////////////////////

//1. 比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?
//2. 从尾到头打印单链表
//void PrintListFormTailToHead(PNode pHead);
//3. 删除一个无头单链表的非尾节点
//void DeleteNotTailNode(PNode pos);
//4. 在无头单链表的一个非头节点前插入一个节点
//void InsertNotHeadNode(PNode pos, DataType data);
//5. 单链表实现约瑟夫环(JosephCircle)
//6. 逆置 / 反转单链表
//7. 单链表排序(冒泡排序&快速排序)
//8. 合并两个有序链表, 合并后依然有序
//9. 查找单链表的中间节点,要求只能遍历一次链表
//PNode FindMidNode(PNode pHead);
//10. 查找单链表的倒数第k个节点,要求只能遍历一次链表
//11. 判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度。
//12. 判断两个链表是否相交,若相交,求交点。(假设链表不带环)
//13. 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
//14. 复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。
//15. 求两个已排序单链表中相同的数据。void UnionSet(Node* l1, Node* l2);
//
//
//
//* 比较顺序表和链表的优缺点,他们分别在什么场景下使用它。
//
//
//1. 顺序表支持随机访问,单链表不支持随机访问。
//2. 顺序表插入 / 删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入 / 删除效率更高,时间复杂度为O(1)。
//3. 顺序表的CPU高速缓存效率更高,单链表CPU高速缓存效率低。

#endif

linklist.c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值