【数据结构】定长顺序表

【数据结构】顺序表

关于基础数据结构,分为两类:

①线性:数组、链表、顺序表

②非线性:树、图

顺序表和链表的区别:

顺序表:逻辑连续、物理连续

链表:逻辑连续、物理不一定连续

顺序表可细分为两类:

①定长顺序表(在栈内操作)

②不定长顺序表(可扩容,在堆内操作)

扫描二维码关注公众号,回复: 3822733 查看本文章

↑因此顺序表一般都通过创建数组来建立。

此篇博客专门针对定长顺序表做一些操作!!

初始化:

void InitList(PSeqList pl)
{
	assert(pl != NULL);
	if(pl == NULL)
	{
		return ;
	}
	pl ->cursize =0;//将初始长度置为0
}

初始化长度为0

按位插入:

//按位插入
int InsertPos(PSeqList pl,int pos,ELEM_TYPE val)
{
	if(pl == NULL)
	{
		return ;
	}
	if(pos<0 || pos>pl->cursize || IsFull (pl))
	{
		return -1;
	}
	for(int i=pl->cursize -1;i>=pos;i--)
	{
		pl->elem [i+1]=pl->elem [i];
	}
	pl->elem [pos]=val;
	pl->cursize ++;//一定别忘了插入后长度+1
	return 1;
}

按位删除:

//按位删除
int DeletePos(PSeqList pl,int pos)
{
	if(pl == NULL)
	{
		return 0;
	}
	if(pos<0 || pos>pl->cursize -1)
	{
		return -1;
	}
	for(int i=pos;i<pl->cursize -1;i++)
	{
		pl->elem [i]=pl->elem [i+1];
	}
	pl->cursize --;
	return 1;
}

按元素删除:

//按元素删除
int DeleteKey(PSeqList pl,ELEM_TYPE key)
{
	if(pl==NULL)
	{
		return 0;
	}
	int i=0;
	//遍历数组,看key是否存在
	for(i;pl->elem [i]!=key;i++)
	{
		if(i==pl->cursize -1)
		{
			return -1;
		}
	}

	for(int j=i;j<pl->cursize ;j++)
	{
		//若找到
		if(pl->elem [j]==key)
		{
			//删除
			for(int k=j;k<pl->cursize -1;k++)
			{
				pl->elem [k]=pl->elem [k+1];
			}
			pl->cursize --;
			j--;
		}
	}
	return 1;
}

其他功能:

//查找元素
int Search(PSeqList pl,ELEM_TYPE key)
{
	int find=-1;
	if(pl !=NULL)
	{
		for(int i=0;i<pl->cursize ;i++)
		{
			if(pl->elem [i]==key)
			{
				find=i;
				break;
			}
		}
	}
	return find;
}
//判满
bool  IsFull(PSeqList pl)
{
	if(pl->cursize ==ARRAY_SIZE )
	{
		return 1;
	}
	return 0;
}

//显示函数
void Show(PSeqList pl)
{
	for(int i=0;i<pl->cursize;i++)
	{
		printf("%d  ",pl->elem [i]);
	}
}

//清空数据
void Clear(PSeqList pl)
{
	pl->cursize =0;
}

//销毁顺序表
void Destroy(PSeqList pl)
{
	Clear (pl);
}

完整代码如下:

SeqList.h

#include<stdio.h>
#define ARRAY_SIZE 5

typedef int ELEM_TYPE;//方便于修改元素的类型,不仅限于int型
//定义结构体
typedef struct SeqList
{
	ELEM_TYPE  elem[ARRAY_SIZE ];//定义数组
	int cursize;//数组长度
}SeqList ,*PSeqList;

//初始化
void InitList(PSeqList pl);
//按位插入
int InsertPos(PSeqList pl,int pos,ELEM_TYPE val);
//按位删除
int DeletePos(PSeqList pl,int pos);
//按元素删除
int DeleteKey(PSeqList pl,ELEM_TYPE key);
//查找元素
int Search(PSeqList pl,ELEM_TYPE key);
//判满
bool  IsFull(PSeqList pl);
//显示函数
void Show(PSeqList pl);
//清空数据
void Clear(PSeqList pl);
//销毁顺序表
void Destroy(PSeqList pl);

SeqList.cpp

#include<stdio.h>
#include  "SeqList.h"
#include<assert.h>


//初始化
void InitList(PSeqList pl)
{
	assert(pl != NULL);
	if(pl == NULL)
	{
		return ;
	}
	pl ->cursize =0;//将初始长度置为0
}

//按位插入
int InsertPos(PSeqList pl,int pos,ELEM_TYPE val)
{
	if(pl == NULL)
	{
		return 0;
	}
	if(pos<0 || pos>pl->cursize || IsFull (pl))
	{
		return -1;
	}
	for(int i=pl->cursize -1;i>=pos;i--)
	{
		pl->elem [i+1]=pl->elem [i];
	}
	pl->elem [pos]=val;
	pl->cursize ++;//一定别忘了插入后长度+1
	return 1;
}

//按位删除
int DeletePos(PSeqList pl,int pos)
{
	if(pl == NULL)
	{
		return 0;
	}
	if(pos<0 || pos>pl->cursize -1)
	{
		return -1;
	}
	for(int i=pos;i<pl->cursize -1;i++)
	{
		pl->elem [i]=pl->elem [i+1];
	}
	pl->cursize --;
	return 1;
}

//按元素删除
int DeleteKey(PSeqList pl,ELEM_TYPE key)
{
	if(pl==NULL)
	{
		return 0;
	}
	int i=0;
	//遍历数组,看key是否存在
	for(i;pl->elem [i]!=key;i++)
	{
		if(i==pl->cursize -1)
		{
			return -1;
		}
	}

	for(int j=i;j<pl->cursize ;j++)
	{
		//若找到
		if(pl->elem [j]==key)
		{
			//删除
			for(int k=j;k<pl->cursize -1;k++)
			{
				pl->elem [k]=pl->elem [k+1];
			}
			pl->cursize --;
			j--;
		}
	}
	return 1;
}

//查找元素
int Search(PSeqList pl,ELEM_TYPE key)
{
	int find=-1;
	if(pl !=NULL)
	{
		for(int i=0;i<pl->cursize ;i++)
		{
			if(pl->elem [i]==key)
			{
				find=i;
				break;
			}
		}
	}
	return find;
}
//判满
bool  IsFull(PSeqList pl)
{
	if(pl->cursize ==ARRAY_SIZE )
	{
		return 1;
	}
	return 0;
}

//显示函数
void Show(PSeqList pl)
{
	for(int i=0;i<pl->cursize;i++)
	{
		printf("%d  ",pl->elem [i]);
	}
}

//清空数据
void Clear(PSeqList pl)
{
	pl->cursize =0;
}

//销毁顺序表
void Destroy(PSeqList pl)
{
	Clear (pl);
}

main.cpp

#include<stdio.h>
#include  "SeqList.h"

int main()
{
	SeqList a;
	InitList (&a);//初始化
	for(int  i=0;i<10;i++)
	{
		InsertPos (&a,i,i+1);
	}
	 DeleteKey(&a,3);
	 Show(&a);
}

猜你喜欢

转载自blog.csdn.net/VVVv_0427/article/details/82899742
今日推荐