【无标题】


顺序表,相关操作

顺序表

顺序表的初始化

void InitList(SqList *&L) {  
    L = (SqList *)malloc(sizeof(SqList));  
    L->length = 0;  
}

当你在函数中使用 SeqList*& L 作为参数时,你实际上是在传递一个指向 SeqList 指针的引用。这意味着在函数内部对 L 的任何修改(比如让它指向一个新的地址)都会反映到传递给函数的原始指针上。

这在以下情况下很有用:

当你需要初始化一个指针,并让它在函数外部保持有效时。
当你需要在不返回多个值的情况下修改多个变量时。

但是,在纯c语言中一般使用,seqlist**在c++中一般用seqlist*&,可以实现对于该指向seqlist指针本生的改变。

只要高清楚上述问题对于顺序表的操作就会比较简单:
#include <stdio.h>
#include <stdlib.h>
#define max_size 100

//顺序表定义
typedef struct seqlist
{ int length;
int data[max_size];
} seqlist;

//构造空的顺序表
void initList(seqlist **L)
{ L = (seqlist *)malloc(sizeof(seqlist));
L->length = 0;

}

//求顺序表长度
int seqlistlength(seqlist *L)
{ return L->length;
}

//提取顺序表第i个元素
boolean getseqelement(seqlist *L, int i, eletype e) //这里将元素的类型写为eletype e
{ if (i < 0 || i > L->length)
{ return false;
}
if (e == L->data[i - 1])
{ return true;
}
}

//按值查找:在顺序表中从头查找结点值等于给定值 e 的结点,因为是顺序表所以可以直接返回该表的该结点是第几个
int locateseq(seqlist *L, elemtype e) //查找成功概率是(1+n)/2,最好情况:T(n)=O(1) 第一个,最坏情况是T(n)=O(n)
{

int j = 0;
while (j < L->length)
{	if (L->data[j] == e)
	{	printf{"该节点的索引位置是%d\n", j};
		break;
		return j;
	}
	j++;
}
return 0;

}

//插入某个结点,逆序移至i+1~n+1,且插入元素时该列表长度需要增加
//且这里使用seqlist**实现直接对于顺序表中元素改变,能够直接反应到函数外

boolean seqlist(seqlist*& L,int i,eletype e){
//先判断是否空表
if(L->length0){
return false;
}
//判断i的值是否合理
else if(ilength||i<1||maxsize
length)
return false;

else{

//条件可以,将目标元素后移
for(int j=L->length-1;j>=0;j--){	
	data[j+1]=data[j];
	L->length++;	
}
L->data[i]=e;
//在目标元素处实现修改

}
return true;
}//最好情况:插入在n+1 上,移动0次 T(n)=O(1),最坏 T(n)=O(n)

//顺序表中元素的删除
boolean seqdelete(seqlist*&L,int i,elemtype e){//注意此处的i是顺序表中该data的位置,因此
//判断是否是空表,以及i的范围
if(ilength||i<1||L->length==0){
printf(“该顺序表为空!!不能实现删除目标元素”);
return false;
}
else{
for(int j=i-1;jlength;j++){
L->data[j-1]=L->data[j];
}
L->length–;
}
return true;

}

//


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值