zoukankan      html  css  js  c++  java
  • 线性顺序表

    #include<stdio.h>
    #include<stdlib.h>


    #define LIST_INIT_SIZE 100
    #define LIST_INCREMENT 10

    typedef char* Status;;

    int *p, *q;

    typedef struct {

    int *elm;

    int length;

    int listsize;


    }SqList;


    void main() {




    SqList List;

    //输出
    void out_put_list(SqList *L);
    //创建一个顺序表
    Status InitList_Sq(SqList *L);

    //在第i个元素前的顺序表中插入数据
    Status ListInsert_Sq(SqList*L, int i, int node);

    //删除第I个元素
    Status ListDelete_Sq(SqList *L, int i);

    InitList_Sq(&List);


    List.elm[0]= 2;//该方法和 *(Q.elm)=1是等价的
    List.elm[1] = 3;
    List.elm[2] = 4;
    List.elm[3] = 5;
    List.length = 4;


    ListInsert_Sq(&List,1,1);


    out_put_list(&List);

    printf("---------------------- ");

    ListDelete_Sq(&List, 3);


    out_put_list(&List);

    }

    //创建一个空的顺序线性表
    Status InitList_Sq(SqList *L) {


    L->elm = (int *)malloc(LIST_INIT_SIZE*sizeof(int));

    if (!L->elm)
    {
    printf("分配内存地址出错");

    exit(0);


    }

    L->length = 0;

    L->listsize =LIST_INIT_SIZE;

    return "Ok";


    }

    //在线性表中的第i个元素前插入元素(i>=1)

    Status ListInsert_Sq(SqList*L, int i,int node) {


    int *newbase;


    if (i<1 || i>(L->length+1)) {

    return "ERROR";

    }

    //判断是否填满线性表的地址
    if (L->length>=L->listsize) {


    newbase = (int*)realloc(L->elm,(L->listsize+LIST_INCREMENT)*sizeof(int));

    if (!newbase) {

    exit(0);

    }

    L->elm = newbase;

    L->listsize += LIST_INCREMENT;

    }

    //先保留 i-1的地址

    p = &(L->elm[i - 1]);

    //然后将i-1后面的地址进行加1(从最后一个元素开始)

    for (q = &(L->elm[L->length - 1]); q >= p; --q) {

    *(q + 1) = *q;

    }

    *p = node;

    (L->length)++;

    return "OK";


    }
    //删除第i个元素
    Status ListDelete_Sq(SqList *L,int i) {


    if (i<0 || i>(L->length - 1)) {

    return "error";
    }

    p = &(L->elm[i - 1]);

    for ( ; i <(L->length); i++)
    {

    *(p) =*(p + 1);

    p++;

    }

    (L->length)--;

    return "Ok";

    }


    //打印线性表中的数据

    void out_put_list(SqList *L) {

    for (int i = 0; i < (L->length);i++) {

    printf("%d ",L->elm[i]);


    }


    }

  • 相关阅读:
    【转】依赖注入那些事儿
    【转】Visual Studio單元測試小應用-測執行時間
    【转】 代码设计敏捷开发三部曲
    【转】 c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59
    【转】 C#获取当前程序运行路径的方法集合
    CSVHelper读出乱码 解决方案
    CvsHelper 使用指南
    【转】 C# ListView实例:文件图标显示
    【转】C# winform 加载网页 模拟键盘输入自动接入访问网络
    基于MHA的MySQL高可用
  • 原文地址:https://www.cnblogs.com/paulversion/p/6841529.html
Copyright © 2011-2022 走看看