C语言实现顺序表

数据结构顺序表的简单实现

最近复习了一下数据结构对顺序表进行一下复习!

结构的定义

#include<stdio.h>
//函数结果状态代码 
#define TRUE  1 
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//Status 是函数的类型,其值是函数结果状态代码 
typedef int Status;

#define  NMAX 100
typedef int  ElemType;  //定义元素类型 
typedef struct sqlist{
    ElemType elements[NMAX];
    int length;   
}SqList, *PSqList;

函数定义

//定义函数
Status InitList(PSqList &L);        //初始化 
Status DestroyList(PSqList &L);     //销毁 
int LengthList(PSqList L);          //求长度 
Status ListEmpty(PSqList L);        //判断表空 
int LocateElem(PSqList L, ElemType e);  //按元素值查找 
Status DisplayList(PSqList L);          //输出表 
Status GetElem(PSqList L, int i, ElemType &e);   //求某个数据元素值 
//Status GetElem(PSqList L, int i, ElemType *e); 一样的 
Status ListInsert(PSqList &L, int i, ElemType e);  //插入数据元素 
Status ListDelete(PSqList &L, int i, ElemType &e); //删除数据元素 

函数实现

  • 函数的实现比较简单
Status InitList(PSqList &L){        //初始化 
	L->length = 0;
	return OK; 
}
 
Status DestroyList(PSqList &L){     //销毁 
	//这个内存空间是系统分配的,系统会自动收回 
}
 
int LengthList(PSqList L){          //求长度
	return L->length; 
} 

Status ListEmpty(PSqList L){        //判断表空 
	return (L->length == 0);
}

int LocateElem(PSqList L, ElemType e){  //按元素值查找 
	if(ListEmpty(L)) return ERROR;
	int i;
	while(i <= L->length && L->elements[i] != e){
		i++;
	}
	if(i > L->length) 
		return ERROR;
	return i;
}

Status DisplayList(PSqList L){          //输出表 
	if(ListEmpty(L)) return ERROR;
	for(int i = 1; i <= L->length; i++){
		printf("%2d ",L->elements[i]);
		if(i % 10 == 0) printf("\n");
	}
	printf("\n");
	return OK;
}

Status GetElem(PSqList L, int i, ElemType &e){   //求某个数据元素值   1=< i <= LengthList(L)
	if(i < 1 || i > L->length) return ERROR;
	e = L->elements[i];
	return OK;
}

Status ListInsert(PSqList &L, int i, ElemType e){  //插入数据元素   1=< i <= LengthList(L)+1
	if(L->length == NMAX) return -1;  // 表满 
	if(i < 1 || i > L->length+1) return -2; // i 值不合理
	for(int j = L->length; j >= i; j--){
		L->elements[j+1] = L->elements[j];   //元素后移 
	}
	L->elements[i] = e;   //插入元素 
	L->length++;          //表长度加 1 
	return OK; 
}

Status ListDelete(PSqList &L, int i, ElemType &e){ //删除数据元素  1=< i <= LengthList(L)
	if(L->length == 0) return ERROR;     //表空返回错误 
	if(i < 1 || i > L->length+1) return -2; // i 值不合理
	for(int j = i; j <= L->length; j++){
		L->elements[j] = L->elements[j+1];    //元素前移 
	}
	L->length--;
	return OK;
}

主函数

  • 主函数的测试代码部分
int main(){
	SqList L;
	PSqList PL = &L;   //指针类型绑定内存空间 
	InitList(PL);
	ElemType e; 
	printf("初始化顺序表:\n");
	printf("表长:%d\n",LengthList(PL));
	ListEmpty(PL) == 1?printf("表空\n"):printf("表不空\n");
	printf("插入数字 1-50:\n"); 
	for(int i = 1; i <= 50; i++){
		e = i;
		ListInsert(PL,i,e);
	}
	printf("表长:%d\n",LengthList(PL));
	ListEmpty(PL) == 1?printf("表空\n"):printf("表不空\n");
	printf("输出顺序表:\n");
	DisplayList(PL);
	
	printf("在第1位插入9,10位插入数字99,51位插入999\n");
	ListInsert(PL, 1, 9);
	ListInsert(PL, 10, 99);
	ListInsert(PL, 51, 999);
	printf("输出顺序表:\n");
	printf("表长:%d\n",LengthList(PL));
	DisplayList(PL);
	
	printf("\n删除第51位,删除第10位,删除第1位\n");
	ListDelete(PL, 51, e);
	ListDelete(PL, 10, e);
	ListDelete(PL, 1, e);
	printf("表长:%d\n",LengthList(PL));
	printf("输出顺序表:\n");
	DisplayList(PL);
	return 0;
}

总结

顺序表的实现还是比较简单,相对于链式结构还是简单许多,我这个代码基本上实现了顺序表的若干操作,比较简陋。相信只要努力,以后一定能写出来更好的代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值