zoukankan      html  css  js  c++  java
  • 顺序表 code

    临近期末,学了一学期数据结构,在本学期最后一段时间,写写博客,总结一下这学期都学到了什么!

    顺序表有3个优点:

    (1)方法简单,各种高级语言中都有数组,容易实现。

    (2)不用为表示节点间的逻辑关系而增加额外的存储开销,存储密度大。

    (3)顺序表具有按元素序号随机访问的特点,查找速度快,时间复杂度小。

    顺序表也有2个缺点:

    (1)插入删除操作,平均移动大约表中一半的元素,因此对元素较多的顺序表执行效率低。

    (2)需要预先分配存储空间,过大则容易浪费,过小又容易溢出。

    来看一下顺序表的存储结构:

    #define MAX_SIZE 100  //线性表最大容量

    typedef char ElemType;

    typedef struct{

      ElemType *elem;

      int length;  //当前表长

      int listsize;  //顺序表的最大容量

    }SqList;

    //初始化顺序表:

    int InitList_Sq(SqList *L){  //成功返回1,失败返回0

      L.elem = (ElemType*)malloc(MAX_SIZE*sizeof(ElemType));

      if(!L.elem) return 0;  //分配存储空间失败

      L.length = 0;

      L.listsize = MAX_SIZE;

      return 1;

    }

    //插入操作:

    int ListInsert_Sq(SqList *L, int i, ElemType e){

      if(i < 1 || i > L.ength+1)  return 0;  //i值不合法

      if(L.length >= L.listsize){  //当前存储空间已满,增加分配10个存储空间

        ElemType *newbase = (ElemType*)realloc(L.elem, (L.listsize+10)*sizeof(ElemType));

        if(!newbase) return 0;

        L.elem = newbase;

        L.listsize += 10;

      }

      ElemType *q = L.elem[i-1];  //q为插入位置

      ElemType *p = L.elem[L.length-1];

      for(; p >= q; --p)

        *(p + 1) = *p;  //插入元素之后的元素右移

        *q = e;

        ++L.length;

        return 1;  //插入成功返回1  

    }

    //删除操作
    int List_delete_Sq(SqList *L, int i){
        if(i < 1 || i > L.ength+1)  return 0;  //i值不合法

      ElemType *q = L.elem[i-1];  //q为删除位置

      ElemType *p = L.elem[L.length-1];

      for(; p >= q; --p)

        *(p - 1) = *p;  //删除元素之后的元素左移

        --L.length;

        return 1;  //删除成功返回1  
    }

  • 相关阅读:
    第十讲:网络虚拟化(二)
    第九讲:网络虚拟化(一)
    第十二讲:存储虚拟化(二)
    第十一讲:存储虚拟化(一)
    第八讲:I/O虚拟化
    第七讲:内存虚拟化
    第六讲:CPU虚拟化
    node to traverse cannot be null!
    利用 squid 反向代理提高网站性能(转载)
    Servlet自动加载
  • 原文地址:https://www.cnblogs.com/pbnull/p/4562265.html
Copyright © 2011-2022 走看看