欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言实现顺序表

程序员文章站 2022-07-15 09:13:46
...

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

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

结构的定义

#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;
}

总结

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

相关标签: C语言实现顺序表