线性表 顺序存储 C语言实现

线性表 顺序存储 C语言实现

关于线性表8个基本操作的c语言实现.
[注意]

  1. 顺序表用数组表示 线性表位序从1开始,数组元素下标从0开始.
  2. 顺序表插入删除 判断插入,删除位置是否合法的表示方法.
#include<stdio.h>

//SqList 顺序表
#define MaxSize 50


//定义顺序表
typedef struct{
	int data[MaxSize];  //顺序表元素
	int length;			//顺序表当前长度
}SqList;


//1.顺序表删除  删除顺序表第i个位置的元素,返回值是e
bool ListDelete(SqList *L,int i,int *e){
//1)删除前----判断插入位置是否合法 
	if(i<1 && i>L->length){   //j将顺序表存储在数组中
		return false;
	}
//2)删除中----找到要删除元素的位置并将值赋给e
	*e = L->data[i-1];
//3)删除后----i位置后的元素前移
	for(int j = i;j<L->length;j++){
		L->data[j-1] = L->data[j];
	}
	L->length--;
	return true;

}

//2.初始化  
int InitSqList(SqList *p){
	(*p).length = 0;
	return 1;
}

//3.插入   线性表 位置  数据
bool ListInsert(SqList *p,int i,int e){
	//1)插入前 --检查插入位置是否合法
	if(i>(*p).length+1 || i<1)
		return false;
	if((*p).length>MaxSize)
		return false;
	//2)插入中 -- i位置后元素后移  插入位置  线性表长度+1
	for(int j=(p->length);j>=i;j--){
		(*p).data[j]=(*p).data[j-1];
	}
	p->data[i-1] = e;
	p->length++;
	return true;
}

//4.判断已存在的线性表是否为空   通过长度
int ListEmpty(SqList L){
	if(L.length==0){
		return 1;
	}else{
		return 0;
	}
}

//5.清空线性表
int ClearList(SqList *L){
	L->length=0;
	return 1;
}

//6.线性表遍历
int ListTraverse(SqList L)
{
	int i;
    for(i=0;i<L.length;i++)
          printf(" %d ",L.data[i]);
    printf("\n");
    return 1;
}

//7.获取指定位置元素
int GetElem(SqList L,int i, int *e){
	//1)查找位置是否合法
	if(i>L.length ||i<1)
		return 0;
	//2)进行查找
	*e=L.data[i-1];
	return 1;
}

//8.获取元素所在的位序  返回0查找失败
int LocateElem(SqList L,int e){	
	int i;
	if(L.length=0)
		return 0;
	for(i=0;i<L.length;i++){
		if(L.data[i]=e)
			break;
	}
	if(i>=L.length)
		return 0;
	return i+1;


}

int main(){
	SqList L,Lb;

	int i,j,k;
	int e;

	i=InitSqList(&L);
	if(i=1){
	printf("初始化成功\n");
	printf("初始化线性表长度:%d\n",L.length);
	}
	
	for(j=1;j<=5;j++){  
	ListInsert(&L,1,j);
	}
	printf("\n L依次插入1-5,结果为:\n");
	for(i=0;i<5;i++){
	printf(" %d ",L.data[i]);
	}
	printf("此时长度为:%d\n",L.length);

	i=ListEmpty(L);
	if(i=1){
	printf("线性表为空\n");
	}else{
	printf("线性表不为空\n");
	}
	
	i=ClearList(&L);
	if(i=1){
	printf("线性表清除成功\n");
	}else{
	printf("线性表清除失败\n");
	}

	ListInsert(&L,1,0);
	printf("L表头插入0后:L.data:\n");
	ListTraverse(L);

	i=GetElem(L,1,&e);
	if(i=1){
	printf("第1个元素的值:%d\n",e);
	}else{
	printf("查找元素不存在\n");
	}

	 for(j=3;j<=4;j++)
    {
            k=LocateElem(L,j);
            if(k)
                    printf("第%d个元素的值为%d\n",k,j);
            else
                    printf("没有值为%d的元素\n",j);
    }

    i=InitSqList(&Lb);
    for(j=6;j<=15;j++)
        i=ListInsert(&Lb,1,j);
	printf("插入10个元素后,依次输出Lb的元素:");
    ListTraverse(Lb); 
    j=5;
    ListDelete(&Lb,j,&e); /* 删除第5个数据 */
    printf("删除第%d个的元素值为:%d\n",j,e);
 
    printf("删除后依次输出Lb的元素:");
    ListTraverse(Lb); 



	return 0;
}

猜你喜欢

转载自blog.csdn.net/zhuzi_zhuzi_/article/details/99762584