数据结构:线性表中的顺序表(不定长顺序表)

动态顺序表(不定长顺序表)

概念

顺序表的容量在动态时期(运行期间)确定,大小可改变。

创建

typedef struct DSeqList
{
	int* elem;//指向存储数据的内存
	int length;//有效数据个数
	int listsize;//总格子数(开辟的总单元个数)
}DSeqList,*PDSeqList;

dseqlist.h

void InitSeqList(PDSeqList  ps);//初始化
 
bool Insert(PDSeqListps,int pos,int val);//在pos位置插入val
 
bool Deletepos(PDSeqList ps,int pos);//删除pos位置
 
int Search(PDSeqList ps,int key);//查找关键字key
 
bool DeleteVal(PDSeqList ps,int key);//删除关键字key
 
void Clear(PDSeqList ps);//清除顺序表数据
 
bool IsEmpty(PDSeqList ps);//判断是否为空
 
int GetLength(PDSeqList ps);//得到顺序表的有效长度
 
void Destroy(PDSeqList ps);//摧毁顺序表
 
void Show(PDSeqList ps);//打印顺序表

dseqlist.cpp

初始化:

void InitSeqList(PDSeqList ps)
{
  assert(ps != NULL);
  if(ps == NULL)
  {
    return;
  }
  
  ps->elem = (int*)malloc(INIT_SIZE*sizeof(int));
  ps->length = 0;
  ps->listsize = INIT_SIZE;
}

在pos位置插入val:

static bool lsFull(PDSeqList ps)
{
  return ps->length == ps->list-size;
}

//扩容
static void lnc(PDSeqList)
{
  ps->elem = (int*)realloc(ps->elem,ps->listsize*2*sizeof(int));
  //不需要处理
  ps->length;
  
  ps->listsize *= 2;//2只要经验值
} 
bool Insert(PDSeqListps,int pos,int val)
{
  if(pos<0 || pos > ps->length)
  {
    return false;
  }
  if(lsFull(ps))
  {
   lnc(ps);
  }//容量一定足够
  
  for(int i=ps->length-1;i >= pos;i--)
  {
     ps->elem[i+1] = ps->elem[i];
  }
  
  ps->elem[pos] = val;
  ps->length++;

  return true;
  
}

删除pos位置

bool DeletePos(PDSeqList ps,int pos)
{
    assert(ps != NULL);

	if(pos < 0 || pos >= ps->length)
	{
		return false;
	}
 
	for(int i = pos;i < ps->length - 1;i++)
	{
		ps->elem[i] = ps->elem[i+1];
	}
 
	ps->length--;
 
	return true;
}

查找关键字key:

int Search(PDSeqList ps,int key)//查找函数
{
	assert(ps != NULL);
 
	for(int i = 0;i < ps->length;i++)
	{
		if(ps->elem[i] == key)
		{
			return i;
		}
	}
	return -1;
}

删除关键字key:

bool DeleteVal(PDSeqList ps,int key)
{
	int index = Search(ps,key);
 
	if(index < 0)
	{
		return false;
	}
	return DeletePos(ps,index);
}

清除顺序表数据:

扫描二维码关注公众号,回复: 8687415 查看本文章
void Clear(PDSeqList ps)
{
	ps->length = 0;
}

判断是否为空:

bool lsEmpty(PDSeqList ps)
{
   return ps->length == 0;
}

得到顺序表的有效长度:

int GetLength(PDSeqList ps)
{
	return ps->length;
}

摧毁顺序表:

void Destroy(PDSeqList ps)
{
   free(ps->elem);
   
   ps->elem = NULL;
}

打印顺序表:

void Show(PDSeqList ps)
{
	for(int i = 0;i < ps->length;i++)
	{
		printf("%d",ps->elem[i]);
	}
	printf("\n");
}

 

 
发布了104 篇原创文章 · 获赞 15 · 访问量 7788

猜你喜欢

转载自blog.csdn.net/Kobe51920/article/details/103836309
今日推荐