数组模拟链表

原理

        通过开辟一定的空间用于模拟链表的所有操作,每个节点有 数据域data指针域 next

 初始化所有数据域为null,这样便于判断某块空间是否被使用 

数组模拟链表_第1张图片

 代码实现

#include

using namespace std;

#define null -99999
#define size_list 10000		//给链表开辟的空间

struct ListNode
{
	int data;//数据域
	int next;//指针域,用数组下标模拟指针
};
//链表预留空间
ListNode list[size_list];

//初始化预留空间
void init_List()
{
	//对链表预存空间遍历,数据全部设置为空
	for (int i = 0; i < size_list; i++)
	{
		list[i].data = null;
	}
}

//申请节点
int NewListNode()
{
	for (int i=0;i 0; i--)
	{
		//使用头插法
		int t = NewListNode();
		list[t].data = i;
		list[t].next = list[myHead].next;
		list[myHead].next = t;
	}
	return myHead;
}

//删除链表某个数据
void removeData(int myHead,int data)
{
	for (int cur=myHead;list[cur].next!=null;cur=list[cur].next)
	{
		//如果找到了待删除的数据
		if (list[list[cur].next].data==data)
		{
			int delNode = list[cur].next;
			list[cur].next = list[list[cur].next].next;
			DeleteListNode(delNode);
		}
	}
}

//删除链表指定节点的数据
void removePos(int myHead,int pos)
{
	for (int i=myHead;list[i].next!=null;i=list[i].next)
	{
		if (list[i].next == pos)
		{
			list[i].next = list[pos].next;
			DeleteListNode(pos);
			break;
		}
	}
}

//删除链表指定节点下标的数据
void removeIndex(int myHead,int index)
{
	int pre = myHead;
	for (int i=1;i

你可能感兴趣的:(数据结构与算法,链表,数据结构)