天天看点

顺序表实现代码(c/c++/python)

C语言

--------------------------------------------------------------------------------------------------------

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

typedef struct{
	int *data;
	int length;
	int size;
}seqList;

//初始化顺序表
int initList(seqList *L, int size);

//销毁顺序表
void destoryList(seqList *L);

//清空顺序表
void clearList(seqList *L);

int isEmpty(seqList L){
	return (L.length == 0);
}

//返回顺序表元素个数
int listLength(seqList L);

//返回顺序表最大元素个数
int listSize(seqList L); 

//返回元素 
int getElem(seqList L, int i, int *e); 
           

c++

-----------------------------------------------------------------------------------------

#include <iostream>
#include <cstdlib>
using namespace std;
class seqList{
	public:
		int *data;
		int length;
		int size;
		//初始化顺序表
		int initList(int size);
		
		//销毁顺序表
		void destoryList();
		
		//清空顺序表
		void clearList();
		
		int isEmpty();

		//返回顺序表元素个数
		int listLength();
		
		//返回顺序表最大元素个数
		int listSize(); 
		
		//返回元素 
		int getElem(int i, int &e); 
		
		//查找元素 
		int searchElem(int e);
		
		//插入元素
		int insertElem(int i, int e);
		
		//删除元素
		int deleteElem(int i, int &e); 	
};
int seqList::initList(int size){
	data = new int[size];
	length = 0;
	size = size;
}
void seqList::destoryList(){
	delete data;
	length = 0;
	size = 0;
}
void seqList::clearList(){
	length = 0;
}
int seqList::listLength(){
	return length;
}
int seqList::listSize(){
	return size;
}
int seqList::isEmpty(){
	return (length == 0);
}
int seqList::getElem(int i, int &e){
	if(i >= 0 && i < length){
		e = data[i];
		return 1;
	}else{
		return 0;
	}
}
int seqList::searchElem(int e){
	for(int i = 0; i < length; i++){
		if(e == data[i]) return i;
	}
	return 0;
}
int seqList::insertElem(int i, int e){
	if(length == size){	//顺序表已满 
		return 0;
	}
	if(i >= 0 && i <= length){
		int j;
		for(j = length - 1; j >= i; j--){
			if(j > 0) 
				data[j+1] = data[j];
		}
		data[i] = e;	//插入元素 
		length++;	//长度加1 
	}else{
		return 0;
	}	
}
int seqList::deleteElem(int i, int &e){
	if(isEmpty()){
		return 0;
	}
	else{
		if(i >= 0 && i < length){
			e = data[i];
			for(int j = i; j < length - 1; j++){
				data[j] = data[j+1];
			}
			length--;
			return 1;
		}else{
			return 0;
		}		
	}	
}
int main(){
	seqList L;
	L.initList(20);
	L.insertElem(0,3);
	L.insertElem(0,2);
	L.insertElem(0,1);
	for(int i = 0; i < L.length; i++){
		cout<<L.data[i]<<" "; 
	}
	return 0;
} 
           

python 3.5

---------------------------------------------------------------------------------

# 个人觉得python实习顺序表毫无意义
class seqList:
    # 初始化
    def __init__(self):
        self.length = 0
        self.data = []
    # 清空顺序表
    def clear(self):
        self.length = 0
        self.data = []
    # 顺序表是否为空
    def isEmpty(self):
        return (self.length == 0)
    # 返回顺序表的长度
    def Length(self):
        return self.length
    # 获得元素
    def get(self, i):
        if(i >= 0 and i < self.length):
            return self.data[i]
        else:
            print("索引值错误")
    #查找元素
    def search(self, e):
        # index = self.data.index(e)
        # return index
        for i in range(0, self.length):
            if e == self.data[i]:
                return i
        return -1
    # 插入元素
    def insert(self, i, e):
        self.data.insert(i,e)
        self.length = len(self.data)
    # 删除元素
    def delete(self, i,):
        if i >=0 and i<self.length:
            e = self.data[i]
            del self.data[i]
            self.length = len(self.data)
            return e

if __name__ == '__main__':
    L = seqList()
    L.insert(0,3)
    L.insert(0,2)
    L.insert(0,1)
    for i in range(0, L.length):
        print("%d"%L.data[i],)
    print("length:%d"%L.length)
    e = L.get(0)
    print("位置为0的元素:%d"%e)
    i = L.search(e)
    print("e的位置是:%d"%i)
    e =  L.delete(1)
    print("删除的元素:%d"%e)
    for i in range(0, L.length):
        print("%d"%L.data[i],)