静态链表。实现。

 对于某些高级程序设计语言,并没有指针,又想使用链表结构。用可以数组实现。称为,静态链表。
 
/*
node	data	cur
0				1----------s[0].cur指向可用的节点。
1		x		2----------链表头指针
2		x		3	
3		x		4
4		x		5
5		x		6	
6		x		7
7		x		8	
8		x		9
9		x		0----------链表末尾
*/
#include <iostream>

using namespace std;

const int MAXSIZE=20; 
typedef int DataType;
typedef struct  
{
	DataType data;
	int cur;
}node,SLinkList[MAXSIZE];

void init_node(SLinkList S);
int find_previous_x(SLinkList S,int head,DataType x);
void insert_node(SLinkList S,int &head,DataType x,DataType y);//在x之前插入。
void delete_node(SLinkList S,int &head,DataType x);//删除为x的节点。
int malloc_node(SLinkList S);
void free_node(SLinkList S,int i);//实现释放i的内存。。


int main()
{
	SLinkList S;
	init_node(S);
	int head=malloc_node(S);
	int temp=head;
	S[head].data=1;
	for (int i=1;i<5;++i)
	{
		S[head].cur=malloc_node(S);
		head=S[head].cur;
		S[head].data=i+1;
	}
	S[head].cur=0;
	head=temp;

	//delete_node(S,head,4);
	//delete_node(S,head,5);
	delete_node(S,head,1);

	//insert_node(S,head,4,8);
	
	while(head)
	{
		cout<<S[head].data<<endl;
		head=S[head].cur;
	}

	system("pause");
	return 0;
}

void init_node(SLinkList S)
{
	for (int i=0;i<MAXSIZE-1;++i)
	{
		S[i].cur=i+1;
	}
	S[MAXSIZE-1].cur=0;//尾节点指向0。
}

int find_previous_x(SLinkList S,int head,DataType x)
{
	for (int i=head;i!=0;)
	{
		if (x==S[S[i].cur].data)//从head.cur开始寻找。
		{
			return i;
		}
		i=S[i].cur;//
	}
}

void insert_node(SLinkList S,int &head,DataType x,DataType y)
{
	int i=malloc_node(S);
	S[i].data=y;
	if (x==S[head].data)
	{
		S[i].cur=head;
		head=i;
	}
	else
	{
		int index=find_previous_x(S,head,x);
		S[i].cur=S[index].cur;
		S[index].cur=i;
	}

}

void delete_node(SLinkList S,int &head,DataType x)
{
	int temp;
	if (x==S[head].data)
	{
		temp=head;
		head=S[head].cur;
	}
	else
	{
		int index=find_previous_x(S,head,x);
		temp=S[index].cur;
		S[index].cur=S[temp].cur;
	}
	free_node(S,temp);
}

int malloc_node(SLinkList S)
{
	//只单纯实现malloc函数的功能。
	int i=S[0].cur;
	S[0].cur=S[i].cur;

	return i;
}

void free_node(SLinkList S,int i)
{
	//只用实现free的原来功能就行,只是删除节点,不管剩下的链表是否还连续。
	S[i].cur=S[0].cur;
	S[0].cur=i;
}
虽然就短短的100多行,确花了将近4个小时的时间,而且还不够完善,没有足够的测试,还有一些功能没有实现。待续吧。
静态链表是一种基于数组的链表实现方式,它可以在不使用指针的情况下实现链表的基本操作。静态链表实现归并排序的基本思路是将数组分成若干个小的有序数组,然后将这些有序数组两两合并,直到最终得到一个完整的有序数组。 以下是静态链表实现归并排序的步骤: 1. 定义静态链表结构体,包含数据和指向下一个元素的指针。 2. 定义归并排序函数,该函数接收一个静态链表作为参数。 3. 在归并排序函数中,首先判断链表是否为空或只有一个元素,如果是,则直接返回。 4. 如果链表中有多个元素,则将链表分成两个部分,分别递归调用归并排序函数。 5. 在递归调用结束后,将两个有序链表合并成一个有序链表。 6. 合并两个有序链表的方法是,比较两个链表的头元素,将较小的元素插入到新链表中,并将指针指向下一个元素。 7. 最后返回新链表。 以下是静态链表实现归并排序的Python代码示例: ```python class Node: def __init__(self, val, next=None): self.val = val self.next = next def merge_sort(head): if not head or not head.next: return head mid = get_mid(head) right = mid.next mid.next = None left = head left = merge_sort(left) right = merge_sort(right) return merge(left, right) def get_mid(head): if not head: return head slow = head fast = head while fast.next and fast.next.next: slow = slow.next fast = fast.next.next return slow def merge(left, right): dummy = Node(0) cur = dummy while left and right: if left.val < right.val: cur.next = left left = left.next else: cur.next = right right = right.next cur = cur.next if left: cur.next = left if right: cur.next = right return dummy.next ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值