数据结构笔记(一)--------单链表的两种实现方式

链表常见的定义与原理,这里不再赘述,不懂的可以去自己搜搜,这里主要记录常见的两种链表的实现方式,也就是动态链表与静态链表。

一、动态链表与静态链表

动态链表就是我们常见的用结构体实现的链表,因为结构体的内存分是动态的(只有的被定义时才会分配内存),所以在运行时会根据需要动态的分配内存,在实际应用开发中应用较多,但在运行时动态的分配内存,会占据大量的时间,但在做一些算法题时,会有时间限制,所以就需要静态链表一次性申请内存(动态链表也可以但实现有些麻烦)。

1、动态链表

typedef struct Node {
	int 	data ;
	Node* 	next;
}List,*ListLink;
//创建链表
int main()
{
	ListLink  head = NULL, q = NULL, m = NULL;
	
	head = new (List);
	head->data = 0;
	head->next = NULL;
	q = head;
	char   a[] = "hello";
	int n = sizeof(a) / sizeof(a[0]);

	for (int i = 0; i < n; i++)
	{
		ListLink p = new(List);
		p->data = a[i];
		p->next = NULL;
		q->next = p;
		q = p;
	}

	m = head ->next;
	while (m)
	{
		cout << m->data << " ";
		m = m->next;
	}
	return 0;
}

//插入操作
//在第k个位置插入
void  add(ListLink head, int  k, char a)
{
if(head == NULL || k <= 0 )
{
	return ;
}
	ListLink p;
	p = head->next ;

	ListLink  list1 = new List;
	list1->data = a;
	list1->next = NULL;

	while (p && k-1)
	{
		k--;
		p = p->next;
	}
	list1->next = p->next;
	p->next = list1;
}
=
//删除操作
//删除第k个字符
void earse(ListLink head , int k)
{
	ListLink  p = NULL , q = NULL;
	p = head->next;

	while (p->next && k - 2)
	{
		k--;
		p = p->next;
	}
	q = p->next;
	p->next = q->next;
	delete q;
	q = NULL;
}

//反转链表
void reverse(ListLink head)
{
	if(head == NULL )
	{
		return;
	}
	
	ListLink  beg = NULL, end = NULL;
	beg = head->next;
	end = beg->next;

	while (end)
	{
		beg->next = end->next;
		end->next = head->next;
		head->next = end;
		end = beg->next;
	}
}
//排序在下一篇博客一起总结

2.静态链表

#include <iostream>

using namespace std;


int const N = 100010;

int  head, idax, da[N] , ne[N]  ;

void init () //初始化
{
    head = -1;
    idax = 0;
}

void add_to_head( int x )//头插法
{
    da [ idax ] = x;
    ne [ idax ] = head;
    head = idax ++;

}

void add_to_k( int k , int x )//在第k个后插入
{
    da[ idax ] = x;
    ne[ idax ] = ne[ k ];
    ne[ k ] = idax ++;
}

void remove( int k )//删除操作
{
    ne[ k ] = ne  [ne[k] ];
}

//输出
 for(int i = head ; i != -1 ; i = ne[i]) cout << da[i] << ' ' ;
    cout << endl ;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值