数据结构--学习篇之单链表的实现3.2

链表:

//优点:

1. 按需申请空间,不用了就释放空间(更合理的使用了空间)

2. 头部中间插入删除数据,不需要挪动数据不存空间浪费

// 缺点:

1. 每个一个数据,都要存一个指针去链接后面数据节点

2. 不支持随机访问(用下标直接访问第i个)
 

tip:顺序表的优点就有:支持随机访问  (有些算法,需要结构支持随机访问,比如:二分查找、比如优化的快排等等)

// 打印

 //打印
 void SListPrint(SLTNode*phead)
 {
 	SLTNode* cur=phead;
 	while(cur != NULL)
 	{
 		printf("%d->",cur->data);
 		cur=cur->next;
	 }
  } 
 
 void TestSList1()
 {
 	SLTNode* plist=NUlL;
 	SListPushBack(&plist,1);
 	SListPushBack(&plist,2);
 	SListPushBack(&plist,3);
 	SListPushBack(&plist,4);
 	
 	SListPrint(plist);
 }

//头插

//创建新
 SLTNode* BuyListNode(SLTDataType x)
 {
 	SLTNode* newnode=(SLTNode*) malloc(sizeof(SLTNode));
 	if(newnode==NULL)
 	{
 		printf("malloc fail\n");
 		exit(-1);
	 }
	 
	newnode->data=x;
 	newnode->next=NULL;
 	
 	return newnode;
  } 

//头插
void SListPushFront(SLTNode** pphead,SLTDataType x)
{
	SLTNode* newnode=BuyListNode(x);
	
	newnode->next=*pphead;
	*pphead=newnode;
 } 

//尾删

//尾删
void SListPopBack(SLTNode** pphead)
{
	if(*pphead==NULL)
	{
		return;
	}
    //一个节点
    
    //两个节点
	if((*pphead)->next==NULL)
	{
		free(*pphead);
		*pphead=NULL;
	}
	else
	{
		/*SLTNode* pre=NuLL;
		SLTNode* tail=*pphead;
		whiel(tail->next != NULL)
		{
			tail=NULL;
			tail=tail->next;
		}
		free(tail);
		tail=NULL;
		pre->next=NULL;
		*/
		SLTNode* tail=*pphead;
		whiel(tail->next->next != NULL)
		{
			tail=NULL;
			tail=tail->next->next;
		}
		free(tail);
		tail->next=NULL;
	 } 
} 

//头删

//头删
void SListPopFront(SLTNode** pphead)
{
	if (*phead==NUll)
	{
		return;
	}
	else
	{
		SLTNode* next=*pphead->nxet;
		free(*pphead);
		*pphead=next;
	}
 } 
 

// 查找

//查找
SLTNode* SListFInd(SLTNode* phead,SLTDatsTYpe x)
{
	SLTNode*cur =phead;
	while(cur !=NULL)
	{
		if(cur->data==x)
		{
			return cur;
		 } 
		 else
		 {
		 	cur=cur->next;
		 }
	}
    return NULL;
 } 

// 在pos位置之前去插入一个节点

// 在pos位置之前去插入一个节点
 void SListInsert(SLTNode** pphead,SLTNode* pos,SLTDataType x)
 {
 	SLTNode* newnode=BuyListNode(x);
 	if(*pphead==pos)
	{
		newnode->next=*pphead;
		*pphead=newnode;
	 } 
 	
 	else
 	{
 	//找到pos的前一个位置
	SLTNode* posPrev=*pphead;
	while(popPrev->next != pos)
	{
		posPrev=pos->next;

		 posPrev->next=newnode;
		 newnode->next=pos; 
		}
	}
 }

单链表的缺陷还是很多的,单纯单链表增删查找的意义不大

1、很多题考查的都是单链表
2、单链表更多的是去更复杂度数据结构的子结构。

eg:哈希桶、邻接表
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值