从0开始的数据结构的书写-------线性表(单链表)

(复习考研的休息区,心血来潮,写点代码)

三个规则:

1、不使用c++ stl库进行书写

2、最好基于严蔚敏老师的数据结构

3、最好使用malloc和realloc动态分配内存

(如果有问题或者是有没有实现的操作,请大家提出来)

cpp 复制代码
// 链表实现 
#include<iostream>
#include<cstring>

using namespace std;

#define N 100
#define OK true 
#define ERRORINT 0x3f3f3f3f3f
#define ERROR false

typedef struct LNode
{
	// 单链表 
	int data;
	struct LNode *ne;
}LNode , *LinkList;


void InitList(LinkList &L)
{
	L = (LinkList)malloc(sizeof(LNode));
	L -> ne = NULL; // 建立带头节点的单链表 
}

// 头插法 
void HeadInsert(LinkList &L)
{
	for(int i = 1;i <= 10;i ++)
	{
		LinkList p = (LinkList)malloc(sizeof(LNode));
		p -> data = i;
		p -> ne = L -> ne;
		L -> ne = p;
	}
} 

// 尾插法
void TailInsert(LinkList &L)
{
	LinkList now = L;
	for(int i = 1;i <= 10;i ++)
	{
		LinkList p = (LinkList)malloc(sizeof(LNode));
		p -> data = i;
		now -> ne = p;
		now = p;
	}
	now -> ne = NULL;
} 

// 插入到第idx位置 
bool InsertList(LinkList &L , int idx , int e)
{
	LinkList p = L;
	int i = 0;
	while(p && i < idx - 1) 
	{
		p = p -> ne;
		i ++;
	}
	if(!(p -> ne) || i > idx - 1) return ERROR;
	
	cout << "插入数据" << e << endl; 
	LinkList s = (LinkList) malloc(sizeof(LNode));
	s -> data = e;
	s -> ne = p -> ne;
	p -> ne = s;
	
	return OK;
}

// 删除节点 
int DeleteList(LinkList &L , int idx)
{
	LinkList p = L;
	int i = 0;
	while(p && i < idx - 1)
	{
		p = p -> ne;
		i ++;
	}
	if(!p || i > idx - 1) return ERROR;
	int e = p -> ne -> data;
	cout << "删除节点" << e << endl; 
	p -> ne = p -> ne -> ne;
	return e;
}

void print(LinkList L)
{
	LinkList p = L;
	cout << "当前链表数据为:";
	p = p -> ne;
	bool f = false;
	while(p)
	{
		if(f) cout << "->";
		cout << p -> data;
		f = true;
		p = p -> ne;
	}
	cout << endl;
}

int main()
{
	LinkList L;
	InitList(L);
	
	// HeadInsert(L);
	// print(L)
	TailInsert(L);
	print(L);
	
	InsertList(L , 3 , 11);
	InsertList(L , 5 , 12);
	print(L);
	DeleteList(L , 6);
	DeleteList(L , 3);
	print(L);
	return 0;
}
相关推荐
_深海凉_37 分钟前
LeetCode热题100-最小栈
java·数据结构·leetcode
_深海凉_2 小时前
LeetCode热题100-除了自身以外数组的乘积
数据结构·算法·leetcode
xiaotao1313 小时前
01-编程基础与数学基石: Python核心数据结构完全指南
数据结构·人工智能·windows·python
浅念-6 小时前
从LeetCode入门位运算:常见技巧与实战题目全解析
数据结构·数据库·c++·笔记·算法·leetcode·牛客
剑挑星河月7 小时前
763.划分字母区间
数据结构·算法·leetcode
iiiiyu7 小时前
面向对象高级接口的综合案例
java·开发语言·数据结构·编程语言
Mem0rin8 小时前
[Java/数据结构]二叉树练习题几则
java·开发语言·数据结构
北顾笙9808 小时前
day24-数据结构力扣
数据结构·算法·leetcode
LG.YDX8 小时前
笔试训练48天:倒置字符串
数据结构
励志的小陈9 小时前
数据结构--队列(C语言实现)
c语言·开发语言·数据结构