考研数据结构-线性表-顺序表

静态分配

代码实现

#include <stdio.h>
#include <malloc.h> //添加malloc函数的头文件
//预定义常量和类型
#define LIST_INIT_SIZE 10 //线性表的存储空间的初始分配量

typedef int ElemType;//取别名 方便改

typedef struct{
     
	ElemType data[LIST_INIT_SIZE]; //用静态的“数组”存放数据元素
	int length;//顺序表的当前长度
}SqList;//顺序表的类型定义

//初始化 顺序表 静态分配
void InitList(SqList &L){
     
	for(int i=0;i<LIST_INIT_SIZE;i++)
		L.data[i]=0;//将所有数据元素设置默认值
	L.length=0;//顺序表初始长度
}

//插入 顺序表
bool ListInsert(SqList &L,int i,int e){
     
	if(i<1||i>L.length+1)	//判断i的范围是否有效
		return false;
	if(L.length>=LIST_INIT_SIZE)//当前存储空间已满 不能插入
		return false;
	for(int j=L.length;j>=i;j--)//将第i个元素及之后的元素后移
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;//在位置i处放入e
	L.length++;//长度加1
	return true;
}

//删除 顺序表
bool ListDelete(SqList &L,int i,int &e){
     
	if(i<1||i>L.length)//判断i的范围是否有效
		return false;
	e=L.data[i-1];//将被删除的元素赋值给e
	for(int j=i;j<L.length;j++)//将第i个位置后的元素前移
		L.data[j-1]=L.data[j];
	L.length--;//线性表长度减1
	return true;
}

//按位置查找顺序表
ElemType GetElem(SqList L,int i){
     
	return L.data[i-1];
}

//在顺序表L中查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SqList L,ElemType e){
     
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1;//数组下标为i的元素等于e,返回其位序i+1
	return 0;//退出循环,说明查找失败
}

int main(int argc, _TCHAR* argv[])
{
     	
	//声明一个顺序表
	SqList L;
	//初始化顺序表
	InitList(L);
	//插入数据
	for(int i=1;i<LIST_INIT_SIZE;i++){
     
		ListInsert(L,i,i+1);
	}
	//按位查找数据
	for(int i=1;i<=L.length;i++){
     
		//GetElem(L,i);//按位查找操作,获取表L中第i个元素的值
		printf("第%d个为%d\n",i,GetElem(L,i));
	}
	//查找到数值8的位置
	//也可以用键盘输入获取我就不写了
	printf("查找到位置%d",LocateElem(L,8));

	//删除实现
	int e=-1;//用变量e把删除的元素带回来
	if(ListDelete(L, 3, e))
		printf("已删除第3个元素,删除元素值为%d\n",e);
	else
		printf("位序不合法,删除失败");

	//system("pause");//让控制台停留
	return 0;
}

你可能感兴趣的:(C,数据结构)