zoukankan      html  css  js  c++  java
  • 线性表的顺序表示以及实现

    #include <iostream>
    using namespace std;
    #define LIST_INIT_SIZE 100
    #define LISTINCREMENT 10
    #define OVERFLOW -2
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    
    typedef int ElemType;
    typedef int status;
    
    //线性表结构
    typedef struct{
        ElemType *elem;
        int length;
        int listsize;
    }SqList;
    
    
    //初始化线性表
    status InitList_Sq(SqList &L, int number = 0 )
    {
        L.elem = new ElemType[LIST_INIT_SIZE];
        if ( !L.elem )
        {
            exit(OVERFLOW);
        }
        L.length = number;
        L.listsize = LIST_INIT_SIZE;
        cout << "Input the value of the list:"<< endl;
        ElemType value;
        for ( int i = 0; i < number; i++ )
        {
            cin >> value;
            L.elem[i] = value;
        }
        return OK;
    }
    
    //在第i个元素之前插入一个元素e
    status ListInsert_Sq(SqList &L, int i, ElemType e )
    {
        if ( i < 1|| i > L.length + 1 )
        {
            return ERROR;
        }
    
        if ( L.length >= L.listsize )
        {
            ElemType* newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT)*sizeof(ElemType));
            if ( !newbase)
            {
                exit(OVERFLOW);
            }
            L.elem = newbase;
            L.listsize += LISTINCREMENT;
        }
        //int rules = 
        ElemType* q =L.elem + i - 1;
        ElemType* end = L.elem + L.length - 1;
        for (ElemType* p = end; p >= q; p-- )
        {
            *(p+1) = *p;
        }
        *q = e;
        L.length++;
        return OK;
    }
    
    status ListDelete_Sq( SqList &L, int i, ElemType &e )
    {
        if ( i < 1 || i > L.length )
        {
            return ERROR;
        }
    
        e = L.elem[i];
        ElemType *q = &L.elem[L.length-1];
        for ( ElemType* p = &L.elem[i]; p <= q; p++ )
        {
            *(p-1) = *p;
        }
        L.length--;
        return OK;
    }
    
    int LocateElem_Sq( SqList L, ElemType e )
    {
        int location = 0;
        ElemType* p = &L.elem[0];
        ElemType* q = &L.elem[L.length-1];
        while ( *p != e && p < q )
        {
            p++;
            location++;
        }
        return location+1;
    }
    
    void MergeList_Sq( SqList La, SqList Lb, SqList &Lc )
    {
        Lc.length = La.length + Lb.length;
        Lc.listsize = Lc.length;
        ElemType* pa = La.elem;
        ElemType* pb = Lb.elem;
        Lc.elem = new ElemType[Lc.listsize];
        if (!Lc.elem)
        {
            exit(OVERFLOW);
        }
        ElemType* pc = Lc.elem;
        ElemType* pa_End = La.elem + La.length - 1;
        ElemType* pb_End = Lb.elem + Lb.length - 1;
        while( pa <= pa_End && pb < pb_End )
        {
            if ( *pa < *pb )
            {
                *pc = *pa;
                pa++;
            }
            else
            {
                *pc = *pb;
                pb++;
            }
            pc++;
        }
        while( pa <= pa_End )
        {
            *pc++ = *pa++;
        }
        while( pb <= pb_End )
        {
            *pc++ = *pb++;
        }
    }
    
    void output_List( SqList &L )
    {
        ElemType *q = &L.elem[L.length-1];
        for ( ElemType *p = &L.elem[0]; p <= q; p++ )
        {
            cout << *p << "  ";
        }
        cout << endl;
    }
    
    int main()
    {
        SqList L;
        
        cout <<"Input the number of the value of List:"<< endl;
        int t;
        cin >> t;
        InitList_Sq( L, t );
        output_List(L);
    
        cout << "Input the insert location and the value:"<<endl;
        int Insert_location, Insert_value;
        cin >> Insert_location >> Insert_value;
        ListInsert_Sq( L, Insert_location, Insert_value );
        output_List(L);
        
    
        cout << "Input the delete location:"<< endl;
        int Delete_location;
        ElemType Returned_value;
        cin >> Delete_location;
        ListDelete_Sq( L, Delete_location, Returned_value );
        output_List(L);
        cout << Returned_value << endl;
    
        cout << "Input the element to be located:"<<endl;
        int elem;
        cin >> elem;
        int g = LocateElem_Sq( L, elem );
        cout << g << endl;
    
        SqList La;
        SqList Lb;
        SqList Lc;
        int ta,tb;
        cin >> ta;
        InitList_Sq( La, ta );
        output_List(La);
        cin >> tb;
        InitList_Sq( Lb, tb );
        output_List(Lb);
        MergeList_Sq(La,Lb, Lc);
        output_List(Lc);
        return 0;
    }
  • 相关阅读:
    浏览器兼容性
    Php Ajax 跨域问题
    $.ajax()验证登录
    ajax基础知识总结
    Highcharts获取json数据展现饼图 (转)
    (CV学习笔记)梯度下降优化算法
    (CV学习笔记)Attention
    (数学建模)线性规划
    NumPy中文文档搬砖(划掉)学习笔记(1)
    微机原理作业1微机基础
  • 原文地址:https://www.cnblogs.com/2011winseu/p/3183498.html
Copyright © 2011-2022 走看看