王道数据结构:顺序表上基本操作的实现(C语言版)

顺序表的定义:

线性表的顺序存储又称顺序表,顺序表有随机存储的优点,但对于插入删除操作需要移动大量的元素。

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

#define MaxSize 10

//顺序表定义
typedef struct {
	
	int data[MaxSize];//存放顺序表元素的数组
	int length;//顺序表的长度 
//	int size;//顺序表的大小,感觉没必要	
}Sqlist; 

//初始化顺序表 
void initSqlist(Sqlist &sqlist){
	    sqlist.length=0;
	    printf("初始化完成,初始单链表长度为%d\n",sqlist.length);
   
} 
//求表长
void Length(Sqlist l){
    printf("表长为%d\n",l.length);

}
//按值查找 
void LocateElem(Sqlist sq,int e){
	int flag=-1;
	for(int j=0;j<sq.length;j++){
		if(sq.data[j]==e){
			flag=j;
			break; 
		}
	}
	if(flag!=-1){
		 printf("查找成功,在data[%d]上\n",flag);
	}else{
		printf("查找失败"); 
	}
	  
	
}
//按位操作 
void GetElem(Sqlist sq,int i){
    if(i<1||i>sq.length+1){
		printf("查找位置不合法");
	    
	}else{
		printf("data[%d]上的数值为%d",i,sq.data[i-1]);
	}
	
} 
//插入操作 
//实现将元素e插入到顺序表L的第i个位置 
bool ListInsert(Sqlist &sq,int l,int e){
	if(l<1||l>sq.length+1){
		printf("插入位置不合法");
	    return false;
	}
	if(sq.length>=MaxSize){
		printf("存储空间不足");
		return false;
	}
	for (int i=sq.length;i>=l;i--){	
		sq.data[i]=sq.data[i-1];
	}
	sq.data[l-1]=e;
	sq.length++;
	printf("插入成功,插入数据为%d\n",e); 
	return true;
}
//删除操作 
bool ListDelete(Sqlist &sq,int i,int &e){
	//先判断删除是否合法
	if(i<1||i>sq.length+1){
		printf("删除位置不合法");
		return false; 
	} 
	e=sq.data[i-1];
	for(int j=i-1;j<=sq.length;j++){
		sq.data[j-1]=sq.data[j];
	}
	sq.length--;
	printf("删除成功,删除元素为%d\n",e);
	return true; 
}
//输出操作 
void PrintList(Sqlist sq){
		for(int i=0;i<sq.length;i++){
		printf("data[%d]=%d  ",i,sq.data[i]);
	}
}
//判空操作 
bool Empty(Sqlist sq){
	if(sq.length==0){
		printf("链表为空\n"); 
	}else{
		printf("链表不空\n"); 
	}
}
//销毁操作 
void DestoryList(Sqlist &sq){
	
}

int main(){
	Sqlist list1;
	initSqlist(list1);//初始化 
	Empty(list1); 
        ListInsert(list1,1,1);	//插入操作    
        ListInsert(list1,2,2);	//插入操作  
        ListInsert(list1,3,3);	//插入操作  
        ListInsert(list1,4,4);	//插入操作  
        ListInsert(list1,5,5);	//插入操作  
    
	PrintList(list1); //输出表 
	Length(list1);//求表长
	int e=0;
	ListDelete(list1,2,e); 
	PrintList(list1); //输出表 
        Length(list1);//求表长
	LocateElem(list1,2);//按值查找 
	GetElem(list1,3);//按位置查找 
} 

代码运行结果:

发布了90 篇原创文章 · 获赞 36 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_37716512/article/details/104010765