线性表顺序实现

184 阅读1分钟

选用C++编译器

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10

typedef struct SqList{
    int* data;
    int lenth;
    int maxSize;
    
    /*
	初始化顺序表
	*/
    void initList(){
    	this->lenth=0;
    	this->maxSize = MAXSIZE;
    	int max_size = MAXSIZE;
        this->data = (int *)malloc(MAXSIZE*sizeof(int));
        for(int i=0;i<max_size;i++){
        	this->data[i] = 0;
		}
    }
    /*
	向顺序表中指定位置插入值
	int index:下标 从0开始
	*/
	void insert(int index,int e){
		if(index<0||index>this->lenth){
			printf("fail:index:%d out of list",index);
			return;
		}
		for(int i=this->lenth;i>index;i--){
			this->data[i] = this->data[i-1];
		}
		this->data[index] = e;
		this->lenth++;
	}
	
    /*
	向顺序表尾部添加元素
	*/
	void append(int e){
		if(this->lenth>this->maxSize){
			printf("fail:this List is full,can not append");
			return;
		}
		this->insert(this->lenth,e);
	}
	
	/*
	获取顺序表中指定位置元素值
	*/
	int getElem(int index){
		if(index<0||index>=this->lenth){
			printf("fail:index:%d out of list",index);
			return -999999;
		}
		return this->data[index];
	}
	
	/*
	删除指定位置的元素
	int index:要删除元素的下标 从0开始
	*/
	int deleteElement(int index){
		if(index<0||index>=this->lenth){
			printf("fail:index:%d out of list",index);
			return -999999;
		}
		int target = this->data[index];
		
		for(int i=index;i<this->lenth;i++){
			this->data[i] = this->data[i+1];
		}
		this->lenth--;
		return target;
	}
	

	/*
	修改顺序表中指定位置元素值
	*/
	int update(int index,int e){
		int old = this->data[index];
		this->data[index] = e;
		return old;
	}
	
	/*
	查找指定元素在顺序表中的位置
	*/
	int indexOf(int value){
		for(int i=0;i<this->lenth;i++){
			if(this->data[i]==value){
				return i;
			}
		}
		return -1;
	}
	
    /*
    获取当前顺序表中元素个数
	*/
    int getLenth(){
    	return this->lenth;
	}	
	/*
	判断当前顺序表是否为空
	*/
	bool isEmpty(){
		return this->lenth==0?true:false;
	}
	
	/*
	回收顺序表
	*/
	void destory(){
		free(this->data);
		this->lenth = 0;
	}
	
	/*
	打印顺序表中所有元素
	*/
    void printList(){
    	int lenth = this->lenth;
    	for(int i=0;i<lenth;i++){
    		printf("%d ",this->data[i]);
		}
		printf("\n");
	}
}SqList;


int main(){
	SqList sqlist;
	sqlist.initList();
	for(int i=0;i<10;i++){
		sqlist.append(i);
	}
	sqlist.printList();
	printf("sqlist:lenth=%d",sqlist.lenth);

	for(int i=4;i>=0;i--){
		printf("data[%d]=%d\n",i,sqlist.getElem(i));
	}
	sqlist.getElem(5);

	sqlist.insert(5,5);

	sqlist.deleteElement(5);

	sqlist.update(5,10);

	printf("5 in sqlist index=%d",sqlist.indexOf(5));
	
	sqlist.printList();

	sqlist.destory();
	
	sqlist.printList();
	
    return 0;
}