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

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

三个规则:

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

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

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

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

// 链表实现 
#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;
}

上一篇:安卓手机APP开发_媒体开发部分__保持设备处于唤醒状态


下一篇:labview强制转换的一个坑