静态顺序表实现

/* 
	静态顺序表:
	以静态数组的方式存储线性表 
*/
 

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 20
#define null NULL
 
typedef int Elemtype;
typedef struct {
	Elemtype data[MaxSize];
	int length;	
}SeqList;


//初始化 
bool Initlist(SeqList *L){
	if(L==null){
		return false;
	}
	int i=0;
	for(;i<MaxSize;i++){
		L->data[i]=null;
	} 
	L->length=0;
	return true;
}

//遍历 
bool PrintList(SeqList L){
	int i;
	for(i=0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n");
	return true;
}
 
//按位查找,参数i为元素位置,e为返回元素. 
bool GetElem(SeqList L,int i,Elemtype *e){
	if(L.length<i||i<1){
		return false;
	}
	*e=L.data[i-1];
	return true;
} 

//按值查找 
bool LocateElem(SeqList L,Elemtype e,int *index){
	int i=0;
	for(i;i<L.length;i++){
		if(L.data[i]==e){
			*index=i+1;
			return true;
		}
	}
	*index=-1;
	return false;
} 

//在i的位置插入数据(前插法),后插法可转换成这个方法. 
bool ListInsert(SeqList *L,int index,Elemtype e){
	//判断表数据是否为满 
	if(L->length>=MaxSize){
		return false;
	}
	//判断插入位置是否合法. 
	if(index<1||index>L->length+1){
		return false;
	}
	int i;
	for(i=L->length;i>index-1;i--){
		L->data[i]=L->data[i-1];
	}
	L->data[index-1]=e;//这里的下标最好用输入的位置,不用循环结束的值,避免在空表的时候出现错误. 
	L->length++;
	return true;
} 

//删除 
bool ListDelete(SeqList *L,int index,Elemtype *e){
	//判空 判非法 
	if(L->length==0||index<1||index>L->length){
		return false;
	}
	*e=L->data[index-1];
	//printf("%d\n",*e);
	int i;
	for(i=index;i<L->length;i++){
		L->data[i-1]=L->data[i];
	}  
	L->length--;
	return true;
} 

//逆序
bool ReverseList(SeqList *L){
	int i;
	Elemtype e; 
	if(L->length==0||L==null){
		return false;
	} 
	for(i=0;i<=(L->length)/2;i++){
		e=L->data[i];
		L->data[i]=L->data[L->length-i-1];
		L->data[L->length-i-1]=e;
	} 
	return true;
}

int main(int argc, char *argv[])
{
	SeqList L;
	Initlist(&L);
	ListInsert(&L,1,3); 
	PrintList(L);
	int e;
	ListDelete(&L,1,&e);
	printf("%d",e); 
	if(PrintList(L)){
		printf("ok");
	}
	/* 
	GetElem(L,1,&e);
	printf("%d",e);
	*/	
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值