带表头的单链表及其操作

这里是带表头的单链表的操作(急急忙忙补档)

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
	int Element;//数据域
	struct Node* Next;//指针域
};
typedef struct SingleList
{
	struct Node* First;//头指针
	int n;//表长
};
bool SingleListInit(SingleList *L)
{
	L->First=(Node*)malloc(sizeof(Node));//头指针指向第一个节点

	if(!L->First)//如果分配失败报错
		return false;
	L->First->Next=NULL;//结点无直接后继
	L->n=0;//表长0
	return true;
}

bool SingleListInsert(SingleList* L,int i,int Element)
{
	int j;
	Node *p,*q;
	if(i<0||i>L->n)//因为带表头,所以检验的全部后移1
		return false;
	p=L->First;//p指针从头元素开始,寻找被插入元素的直接前驱
	for(j=0;j<i;j++)//因为表头直接可以作为直接前驱,所以不必分情况
		p=p->Next;
	q=(Node*)malloc(sizeof(Node));//为新建节点分配空间
    q->Next=p->Next;//首先获取新节点的直接后继
	p->Next=q;//再获取直接前驱,防止直接后继的数据被新节点指针覆盖断链	
	q->Element=Element;
	L->n++;
	return true;
}

bool SingleListDelete(SingleList *L,int i)
{
	int j;
	Node *p,*q;
	if(i<-1||i>L->n-1)
		return false;
	p=L->First;
	for(j=0;j<i;j++)
		p=p->Next;
	q=p->Next;
	p->Next=q->Next;
	free(q);
	return true;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值