zoukankan      html  css  js  c++  java
  • 第一节 线性表

    一.线性表

    线性表分为1.顺序线性表2.链式线性表(可包括1.循环链表2.双向链表)

    下面以代码实现:

    1.顺序线性表

    //----线性表的动态分配顺序储存结构

    #define LIST_INIT_SIZE 100 //线性表储存空间的初始分配量

    #define LISTINCREMENT 10 //线性表储存空间的分配增量

    type struct {

    Elemtype *elem;  //储存空间基地址

    int length; //当前长度

    int listsize; //当前分配的储存容量(以sizeof(Elemtype)为单位)

    }Sqlist;

    //----构造一个顺序线性表

    Status InitSqlist(Sqlist L)

    {

    if(!(L.elem = (Elemtype*)malloc(listsize*sizeof(Elemtype)))   exit(OVERFLOW);

    L.length=0;

    L.listsize=LIST_INIT_SIZE;

    return ok;

    }

    //-----顺序线性表第i个位置中增添一个元素

    Status ListInsert(Sqlist &L,int i,elemtype e)

    {

    if(i<1||i>length+1) return ERROR; //插入位置有误

    if(L.length>=L.listsize) //线性表已满,需要增加储存空间

    L.elem = (Elemtype*)realloc(L.elem,(L.listsize + LISTINCREMENT)*size of(elemtype));

    if(!L.elem) return (OVERFLOW);

    L.listsize + = LISTINCREMENT;

    }

    q=L.elem[ i-1];

    for(p=L.elem[Length -1];q<=p;--p) *(p+1)=*p;// 插入位置及之后的元素后移

    *q =e;

    ++L.length;

    return ok;

    }

    //-----顺序线性表第i个位置中删除一个元素

    Status ListDelete(Sqlist &L,int i elemtype e)

    {

    if((i<1)||(i>length)) return ERROR;

    q=L.elem[ i-1];

    e=*p;

    for(p=L.elem[Length -1];q<=p;--p) *(p-1)=*p;// 插入位置及之后的元素后移

    *q =e;

    --L.length;

    return OK;

    }

    2.链式线性表

    //----线性表法的单链表储存结构----

    typedef struct LNode

    {

    elemtype data;

    struct LNode* next;

    }LNode,*LinkList;

    //----GetElem函数----

    Status GetElem(LinkList L,int i,Elemtype e)

    {

    p=L->next; j=1;

    while(p&&j<i)

    {

    p=p->next,++j;

    }

    if(!p||j>i) return ERROR;

    e=p->data;

    return OK;

    }

    //链式线性表的增添元素

    Staus ListInsert(Linklist L,int i,elemtype e)

    {

    p=L,j=0;

    while(p&&j<i-1)

    {

    p=p->next;

    j++;

    }

    if(!p||j>i-1) return ERROR;

    s=(LinkList)malloc(sizeof(Lnode));

    s->data=e;

    s->next =p->next;

    p->next =s;

    return ok;

    }

    //链式线性表的删除元素

     Staus ListDelete(LinkList L, int i,elemtype e )

    {

    p=L,j=0;

    while(p->next&&j<i-1)

    {

    p=p->next;

    j++;

    }

    if(!(p->next)||j>i-1) return ERROR;

    e=p->data;

    q=p->next;

    p->next=q->next;//后面补给前面的

    free(q);

    return ok;

    }

    //建立线性表

    void createList(Linklist &L,int n)

    {

    L= (LinkList)malloc(sizeof(LNode));

    L_>next =null;

    for(i=n;i>0;i--)

    {

    P=(LinkList)malloc(sizeof(LNode));

    scanf(&P->data);

    p->next=L->next;

    L->next=p;

    }

    }

  • 相关阅读:
    单点登录
    企业SOA架构案例分析
    京东峰值系统设计
    阿里搜索离线大数据平台架构
    国内不FQ使用ARCore
    Unity Android上视频使用Seek方法跳转有误差
    《搬砖日记》Obi Rope插件的简单使用
    《搬砖日记》AssetsBundle实现资源更新及通过反射添加脚本
    入园一周年
    《搬砖日记》Unity原生MicroPhone的使用
  • 原文地址:https://www.cnblogs.com/dr-xsh/p/12441213.html
Copyright © 2011-2022 走看看