zoukankan      html  css  js  c++  java
  • 【 数据结构(C语言)】 线性表——顺序表示和实现

    1.线性表(linear_list):

    特点:

    在数据元素的非空有限集合中

    1. 存在惟一的一个被称作“第一个”的数据元素;
    2. 存在惟一的一个被称作“最后一个”的数据元素;
    3. 除第一个之外,集合中的每一个数据元素均只有一个前驱
    4. 除最后一个之外,集合中的每一个数据元素均只有一个后继

    2.线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素

    #include <bits/stdc++.h>
    using namespace std;
    
    #define  LIST_INIT_SIZE 100 /// 线性表存储空间的初始分配量
    #define  LISTINCREMENT 10   /// 线性表存储空间的分配增量
    #define  Elemtype  int
    #define  Status  int
    #define  OK 1
    #define  ERROR -1
    #define  OVERFLOW -2
    
    typedef struct
    {
        Elemtype *elem;
        int length;
        int listsize;
    }Sqlist;
    
    Status InitList_Sq(Sqlist &L)
    {
        L.elem = (Elemtype * )malloc(LIST_INIT_SIZE*sizeof(Elemtype));
        if (!L.elem)
        {
           return OVERFLOW;
        }
        L.length = 0;
        L.listsize = LIST_INIT_SIZE;
        return OK;
    }
    Status DestroyList_Sq(Sqlist &L)
    {
       if (L.length > 0 )
       {
           free(L.elem);
           free(&L);
       }
        return OK;
    }
    Status ClearList_Sq(Sqlist &L)
    {
        L.length = 0;
        return OK;
    }
    Status IsEmptyList_Sq(Sqlist &L)
    {
        if (L.length == 0) return OK;
        else return ERROR;
    }
    Status GetLengthList_Sq(Sqlist &L)
    {
        return L.length;
    }
    Status GetElem(Sqlist &L,int i,Elemtype  &e)
    {
        if (i < 1 || i > L.length + 1 ) return ERROR;
        else
        {
            e = L.elem[i-1];
            return OK;
        }
    }
    
    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)
            {
                return OVERFLOW;
            }
            L.elem = newbase;
            L.listsize += LISTINCREMENT;
        }
        int  *last = &L.elem[i-1];
        for (int  *index = &(L.elem[L.length-1]); index >= last; index --)
        {
            *(index +1) = *index ;
        }
        *last  = e;
        ++L.length;
        return OK;
    }
    Status ListDeleteByPos_Sq(Sqlist &L,int i,Elemtype &e)
    {
        if (i < 1 || i > L.length) return ERROR;
    
        int *pos = &L.elem[i-1];
        e = *pos;
        int *last = L.elem + L.length -1;
        for (pos++; pos <= last; pos++)
        {
            *(pos-1) = *pos;
        }
        L.length--;
        return OK;
    }
    Status ListDeleteByVal_Sq(Sqlist &L,Elemtype e)
    {
        int *index = &L.elem[0];
        int *last = &L.elem[L.length-1];
        for (; index <= last; index++)
        {
            if (*index == e)
            {
             for (int *k = index +1; k <= last;  k++)
                   *(k-1) = *k;
             L.length--;
             index--;///因为p的值已经更新了,需要在判断一次
            }
        }
        return OK;
    }
    Status ListTraverse_Sq(Sqlist &L)
    {
        for (int i=0; i<L.length; i++)
        {
           i<L.length-1 ? printf("%d ",L.elem[i]):printf("%d
    ",L.elem[i]);
        }
        return OK;
    }
    
    int main()
    {
        Sqlist Sq_list;
        InitList_Sq(Sq_list);
    
        int n;
        scanf("%d",&n);
    
        for (int i=0; i<n; i++)
        {
            int  val;
            scanf("%d",&val);
            ListInsert_Sq(Sq_list,i+1,val);
        }
        ListTraverse_Sq(Sq_list);
        int dele_val,dele_pos;
         scanf("%d",&dele_pos);
         ListDeleteByPos_Sq(Sq_list,dele_pos,dele_val);
         ListTraverse_Sq(Sq_list);
    
        return 0;
    }
    

      

  • 相关阅读:
    Linux kernel 之 uart 驱动解析
    按键驱动程序(异步通知)
    常用Linux运维命令
    进程上下文、中断上下文及原子上下文
    Linux 设备驱动开发 —— platform设备驱动应用实例解析
    C++中rapidxml用法及例子(源码)
    hpp.h与.h的区别
    使用Visual Studio扩展插件Visual assist X给代码插入注释模板
    VC++ MFC SDI/MDI Ribbon程序的停靠窗格被关闭后如何再次显示
    “ping某个IP地址,如果ping不通则在dos窗口或弹出MsgBox提示原因”的批处理bat命令
  • 原文地址:https://www.cnblogs.com/sxy-798013203/p/7763035.html
Copyright © 2011-2022 走看看