• 顺序表


    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW   -2
    
    #define LIST_INIT_SIZE 10 //线性表存储的初始分配量
    #define LIST_INCREMENT 2  //线性表存储空间的分配增量
    
    typedef int ElemType;
    typedef int Status;
    
    struct SqList
    {
        ElemType *elem;
        int length;
        int listsize; //当前分配的储存容量
    };
    
    void InitList(SqList &L)
    {
        L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
        if(!L.elem)
            exit(OVERFLOW);
        L.length = 0;
        L.listsize = LIST_INIT_SIZE; //初始储存容量
    }
    
    void DestroyList(SqList &L)
    {
        free(L.elem);
        L.elem = NULL;
        L.listsize = 0;
    }
    
    void ClearList(SqList &L)
    {
        L.length = 0;
    }
    
    bool ListEmpty(SqList L)
    {
        if(L.length == 0)
            return true;
        else
            return false;
    }
    
    int ListLength(SqList L)
    {
        return L.length;
    }
    
    Status GetElem(SqList L,int i, ElemType &e)
    {
        if(i < 1 || i > L.length)
            return ERROR;
        e = *(L.elem + i - 1);
        return OK;
    }
    
    int LocateElem(SqList L,ElemType e)
    {
        ElemType *p;
        int i = 1;
        p = L.elem;
        while(i <= L.length)
        {
            if((*p++) == e)
                break;
            ++i;
        }
        if(i <= L.length)
            return i;
        else
            return 0;
    }
    
    Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
    {
        int i = 2;
        ElemType *p = L.elem + 1;
        while(i <= L.length && (*p) != cur_e)
        {
            p++;
            i++;
        }
        if(i > L.length)
            return INFEASIBLE;
        else
        {
            pre_e = *(--p);
            return OK;
        }
    }
    
    Status NextElem(SqList L,ElemType cur_e,ElemType &next_e)
    {
        int i = 1;
        ElemType *p = L.elem;
        while(i < L.length )
        {
            if( *p == cur_e) break;
            i++;
            p++;
        }
        if(i == L.length)
            return INFEASIBLE;
        else
        {
            next_e = *++p;
            return OK;
        }
    }
    
    Status ListInsert(SqList &L,int i,ElemType e)
    {
        ElemType *newbase,*q,*p;
        if(i < 1 || i > L.length + 1)
            return ERROR;
        if(L.length >= L.listsize)//储存空间已满,增加分配
        {
            if(!(newbase = (ElemType *)realloc(L.elem,(L.listsize + LIST_INCREMENT) * sizeof(ElemType))))
                exit(OVERFLOW); //储存分配失败
            L.elem = newbase;
            L.listsize += LIST_INCREMENT;
        }
        q = L.elem + i -1; //q为被插入元素位置 
        for(p = L.elem + L.length - 1; p >= q; --p)
            *(p+1) = *p;
        *q = e;
        ++L.length;
        return OK;
    }
    
    Status ListDelete(SqList &L,int i,ElemType &e)
    {
        ElemType *p,*q;
        if(i < 1 || i > L.length)
            return ERROR;
        p = L.elem + i - 1; //p为被删除元素的位置
        e = *p;
        q = L.elem + L.length - 1; //表尾元素的位置
        for(++p; p <= q; ++p)
            *(p - 1) = *p;
        L.length--;
        return OK;
    }
    
    void ListTraverse(SqList L)
    {
        ElemType *p;
        int i;
        p = L.elem;
        for(i = 1;i <= L.length; i++){
            cout<<(*p++)<<" ";
        }
        cout<<endl;
    }
    int main()
    {
        SqList L;
        InitList(L);
        for(int i = 1; i <= 10; i++)
            ListInsert(L,i,i);
        ListTraverse(L);
        return 0;
    }
  • 相关阅读:
    Mysql.linux登录数据库
    Linux.vim编辑器显示行号
    经济学-泰勒
    MyBatis.多条件排序
    Mysql.复选条件的查询
    前端.省市级联框
    前端.解决form-contral总是换行问题
    若依框架. 仿ThymeLeaf前端SelectDictLable方法
    excel中为什么不显示单引号
    python-爬虫(3)---lxml匹配css
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5002492.html
Copyright © 2020-2023  润新知