zoukankan      html  css  js  c++  java
  • 顺序表的实现

          所谓数据结构,就是定义一组有关系的数据以及在这些数据上的操作,也就是ADT(抽象数据类型)。

          包含三个方面;

         ADT List{ 数据对象:  数据关系:基本运算:}

         以顺序表为例,它的顺序存储类型:

    typedef struct 
    {
    	ElemType data[MaxSize];  // <span style="font-family: Arial, Helvetica, sans-serif;">ElemType存放数据类型</span>
    	int length; 
    }SqList;
         数据对象是一个长度为MaxSize类型为ElemType的数组。一个整形length。

    MaxSize,ElemType通过宏定义自己设置。

          数据关系就是,数组表示顺序表的元素,length表示数组长度。

         并定义了几个基本运算:

    void CreateList(SqList *&L,ElemType a[],int n);   //创建顺序表并赋值 
    void DispList(SqList *L);    //输出顺序表 
    void InitSqList(SqList *&L);  //初始化顺序表 
    void DestroyList(SqList *&L);  //销毁顺序表 
    int ListEmpty(SqList *L);   //推断顺序表是否为空
    int ListLength(SqList *L);  //求顺序表长度 
    int GetElem(SqList *L,int i,ElemType &e);   //获取第i个元素的值,并赋值给e 
    int LocateElem(SqList *L,ElemType e);   //返回等于元素e的元素序号 
    int ListInsert(SqList *&L,int i,ElemType e);  //插入元素 
    int ListDelete(SqList *&L,int i,ElemType &e);  //删除元素 

    最后实现代码例如以下:

    #include<stdlib.h>
    #include<stdio.h>
    #include<iostream>
    #define MaxSize 1000
    #define ElemType int
    #define GET_ARRAY_LEN(array) (sizeof(array)/sizeof(array[0]))
    
    
    using namespace std;
    
    typedef struct 
    {
    	ElemType data[MaxSize];
    	int length; 
    }SqList;
    
    
     
    void CreateList(SqList *&L,ElemType a[],int n);   //创建顺序表并赋值 
    void DispList(SqList *L);    //输出顺序表 
    void InitSqList(SqList *&L);  //初始化顺序表 
    void DestroyList(SqList *&L);  //销毁顺序表 
    int ListEmpty(SqList *L);   //推断顺序表是否为空
    int ListLength(SqList *L);  //求顺序表长度 
    int GetElem(SqList *L,int i,ElemType &e);   //获取第i个元素的值,并赋值给e 
    int LocateElem(SqList *L,ElemType e);   //返回等于元素e的元素序号 
    int ListInsert(SqList *&L,int i,ElemType e);  //插入元素 
    int ListDelete(SqList *&L,int i,ElemType &e);  //删除元素 
    
    
    void CreateList(SqList *&L,ElemType a[],int n){
    	if(L==NULL)L=(SqList *)malloc(sizeof(SqList));
    	for(int i=0;i<n;i++)
    		L->data[i]=a[i];
    		L->length=n;
    }
    
    void DispList(SqList *L){
    	if(ListEmpty(L))
    		return;
    	for(int i=0;i<L->length;i++){
    		cout<<L->data[i]<<" ";
    	} 
    	printf("
    ");	
    }
    
    void InitSqList(SqList *&L){
    	L=(SqList *)malloc(sizeof(SqList));
    	L->length=0; 
    }
    
    void DestroyList(SqList *&L){
    	free(L); 
    }
    
    int ListEmpty(SqList *L){
    	return(L->length==0);
    }
    
    int ListLength(SqList *L){
    	return(L->length);
    }
    
    int GetElem(SqList *L,int i,ElemType &e){
    	if(i<1||i>L->length)return -1;
    	else{
    		e=L->data[i-1];
    		return 1;
    	}
    } 
    
    
    int LocateElem(SqList *L,ElemType e){
    	int i=0;
    	while(L->data[i]!=e&&i<L->length)i++;
    	if(i==L->length)
    	    return -1; 
    	else
    		return i+1;
    } 
    
    int ListInsert(SqList *&L,int i,ElemType e){
    	if(i<1||i>L->length+1){
    		return -1;
    	}
    	i--;
    	for(int j=L->length;j>i;j--){
    		L->data[j]=L->data[j-1];
    	}
    	L->data[i]=e;
    	L->length++;
    	return 1;
    }
    
    int ListDelete(SqList *&L,int i,ElemType &e){
    	if(i<1||i>L->length)return -1;
    	i--;
    	e=L->data[i];
    	for(int j=i;j<L->length-1;j++){
    		L->data[j]=L->data[j+1]; 
    	} 
    	L->length--;
    	return 1;
    }
    
    
    int main()
    {	
    	ElemType e;
    	ElemType a[8]={12,35,23,89,1,4,43,24};
    	SqList * L=NULL;
    	InitSqList(L); 
    	CreateList(L,a,GET_ARRAY_LEN(a));
    	DispList(L);
    	GetElem(L,4,e);
    	cout<<e<<endl;
    	cout<<LocateElem(L,23)<<endl;
    	ListInsert(L,5,34);
    	DispList(L);
    	ListDelete(L,7,e);
    	cout<<e<<endl;
    	DispList(L);
    	DestroyList(L);
    }
    能够通过改ElemType换成别的类型的顺序表非常方便。

  • 相关阅读:
    Eureka与ZooKeeper 的比较(转)
    springcloud 与分布式系统(转载)
    jvm 分代回收算法通俗理解
    关于JVM调优
    Java常用的数据结构
    mysql数据库引擎(转载)
    java的堆栈通俗理解
    ArrayList 的实现原理
    hashMap 源码解读理解实现原理和hash冲突
    Sklearn库例子——决策树分类
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6857770.html
Copyright © 2011-2022 走看看