线性表链式存储结构

单链表

用一组地址任意的存储单元存放线性表中的数据元素
数据域(数据元素)+指针域(指示后继元素的存储位置)=结点
以 “结点的序列” 表示线性表——称作链表

单链表基本操作及实现

查找

按位置查找
链表的操作只能通过从头指针出发,顺着链域next逐个结点比较,直到搜索到指定位置的结点为止

Status List_Retrieve(SqListPtr L, int pos, ElemType *elem)
{
	Status s = range_error;
	Ptr p = (*L)->next; 
	int i = 1;
	while(p && i<pos){
		i++;
		p = p->next;
	}
	if(p && i==pos){
		*elem = p->data;
		s=success;
	}
	return s;
}

按值查找
1.初始化:p指针指向线性表第一个结点;位置i=1;操作状态s为错误
2.只要线性表不空,循环做下面操作
3.如果带查找数据==当前节点数据,则退出循环
4.否则p指针指向下一个结点;位置计算器i增1
5.循环外面判断p!=NULL,则找到数据,将位置i赋值给pos参数,修改操作状态s为成功
6.返回操作状态s

Status List_Locate(SqListPtr L, ElemType elem, int *pos)
{
	Status s = range_error;
	Ptr p = (*L)->next;
	int i = 1;
	while(p != NULL){
		if(p->elem == elem)
		break;
		i++;
		p = p->next;
	} 
	if(p){
		*pos = i;
		s=success;
	}
	return s;
 } 

插入

Status List_Insert(SqListPtr L, int pos-1,ElemType elem)
{
	Status status;
	Ptr p,s;
	status = List_Retrival(L, pos-1, &p);
	if(status == success){
		s = (LinkedPtr)malloc(sizeof(Node));
		if(s){
			s->elem = elem;
			s->next = p->next;
			p->next = s;
			status = success;
		}
		else status = fatal;
	}
	else status = range_error;
	return status;
 } 

删除

Status List_delete(SqListPtr L, int pos)
{
	Status status = fail;
	Ptr s,p;
	status = List_Retrival(L, pos-1,&p);
	if(status == success)
	{
		s = p->next;
		p->next = s->next;
		free(s);
		s = NULL;
		status = success;
	}
	return status;
}

创建

Status List_Create(SqListPtr L, ElemType data[], int len)
{
	Status s;
	Ptr p;
	s= List_Init(L);
	if(s == success){
		for(int i = len-1; i>=0; --i){
			p = (Ptr)malloc(sizeof(Node));
			if(p){
				p->elem = data[i];
				p->next = (*L)->next;
				(*L)->next = p;
			}
			else{
				s = fail;
				break;
			}
		}
	}
	return s;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值