#include<iostream>
using namespace std;
//声明链表结点的结构体
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode, *Linklist;
//初始化链表
const bool Init_List(Linklist &l) throw(bool)
{
//为头结点分配内存
l = (LinkNode*)malloc(sizeof(LinkNode));
//l = new LinkNode;
//如果内存不足,分配失败( malloc 和 new 分配失败返回 NULL )
if (l == nullptr)
{
return false;
//throw(false);
}
//头结点的指向为空
l->next = nullptr;
return true;
}
//(按位序插入,带头结点)
bool List_Insert(Linklist &l, int i, int e)
{
//从 1 开始,插入位置小于 1 时:
if (i < 1)
{
return false;
}
//定义一个指针 now 指向当前扫描的结点,初始化指向头结点(第 0 个结点)
LinkNode *now = l;
//定义一个整型变量 j 表示 now 指向的是第几个结点,初始化时指向的是头结点
int j = 0;
//遍历要插入的位置
while (now != nullptr && j < i - 1)
{
//确保 now 指针的更新
now = now->next;
j++;
}
//now 指向 null 的时候
if (now == nullptr)
{
return false;
}
//为将要插入的结点分配内存空间
LinkNode *insert = new LinkNode;
//分配失败时:
if (insert == nullptr)
{
return false;
}
//分配成功时:
//放入要插入的数据
insert->data = e;
//先更改 后继 再更改 前驱
insert->next = now->next;
now->next = insert;
//插入成功
return true;
}
//main函数
int main()
{
Linklist l;
Init_List(l);
//try
//{
// Init_List(l);
//}
//catch(bool)
//{
// cerr << "分配失败" << endl;
//}
List_Insert(l, 1, 1);
system("pause");
return 0;
}
初学数据结构——链表
最新推荐文章于 2024-08-13 14:59:01 发布