• c语言线性表


    #include "stdio.h"
    #include "stdlib.h"
    #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
    #define LISTINCREMENT 10 //线性表存储空间的分配增量
    #define OK 1;
    #define ERROR 0;

    typedef struct {
    int *elem; //存储空间基指
    int length; //当前长度
    int listsize;//当前分配的存储容量
    }Sqlist;

    typedef int Status;


    void main()
    {

    //初始化线性表
    Status InitList(Sqlist *L);
    //销毁线性表
    Status DestroyList(Sqlist *L);
    //清空线性表
    Status ClearList(Sqlist *L);
    //判断线性表是否为空
    Status ListEmpty(Sqlist L);
    //获取线性表的长度
    Status ListLength(Sqlist L);
    //获取某个元素
    Status GetElem(Sqlist L, int i, int *e);
    //返回当前元素的下标
    Status LocateElem(Sqlist L, int e, int *index);

    //获取当前元素的前驱
    Status PriorElem(Sqlist L, int cur_e, int *pre__e);

    //获取当前元素的后继
    Status NextElem(Sqlist L, int cur_e, int *next_e);

    //在第i个元素插入元素
    Status ListInsert(Sqlist *L, int i, int e);

    //删除第i个元素并将元素保存在del_e中
    Status ListDelete(Sqlist *L, int i, int *del_e);

    //访问顺序表的每个元素
    Status ListTraverse(Sqlist L);

    Sqlist L;

    InitList(&L);

    ListInsert(&L, 1, 2);
    ListInsert(&L, 2, 3);
    ListInsert(&L, 1, 1);

    //输出顺序链表中的所有值
    for (int i = 0; i < L.length; i++)
    {
    printf("元素的第%d值为%d ", i + 1, L.elem[i]);

    }
    int del_e = 0;

    ListDelete(&L, 3, del_e);

    printf("删除的元素为%d ", del_e);

    printf("输出删除后的线性表 ");

    //输出顺序链表中的所有值
    for (int i = 0; i < L.length; i++)
    {
    printf("元素的第%d值为%d ", i + 1, L.elem[i]);

    }


    }

    //初始化顺序线性表
    Status InitList(Sqlist *L) {

    L->elem = (int *)malloc(sizeof(int)*LIST_INIT_SIZE);
    if (L->elem == NULL) {
    exit(0);
    }
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;

    return OK;
    }


    //在下标为i的地址插入元素
    Status ListInsert(Sqlist *L, int i, int e) {

    if (i<1 || i>L->length + 1) {
    return ERROR;
    }

    if (L->length >= L->listsize) {
    //重新分配内存
    L->elem = (int *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(int));
    };
    for (int j = L->length - 1; j >= (i - 1); j--)
    {
    L->elem[j + 1] = L->elem[j];

    }

    L->elem[i - 1] = e;
    L->length++;

    return OK;

    }

    //删除第i个元素并将元素保存在del_e中
    Status ListDelete(Sqlist *L, int i, int *del_e) {

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

    return ERROR;
    }


    //保留删除的元素

    del_e = L->elem[i - 1];
    for (int j = i - 1; j<L->length; j++)
    {
    L->elem[j] = L->elem[j + 1];

    }
    L->length--;

    }

    //销毁顺序表
    Status DestroyList(Sqlist *L) {

    if (L->elem != NULL) {
    free(L->elem);
    return OK;
    }
    return ERROR;

    }

    //清空顺序表
    Status ClearList(Sqlist *L) {

    L->length = 0;

    return OK;

    }

    //判断顺序表是否为空
    Status ListEmpty(Sqlist L) {

    if (L.length < 1) {
    return OK;
    }
    return ERROR;

    }

    //返回顺序表的长度
    Status ListLength(Sqlist L) {

    return L.length;
    }

    //返回线性表的第I个元素
    Status GetElem(Sqlist L, int i, int *e) {

    if (i<1 && i>L.length) {

    return ERROR;
    }
    e = L.elem[i - 1];
    }

    //返回当第一个元素的下标
    Status LocateElem(Sqlist L, int e, int *index) {

    for (int i = 0; i < L.length; i++)
    {
    if (e == L.elem[i]) {
    index = i;
    return OK;
    }

    }
    return ERROR;

    }
    //获取当前元素的前驱
    Status PriorElem(Sqlist L, int cur_e, int pre__e) {

    for (int i = 0; i < L.length; i++)
    {
    if (cur_e == L.elem[i] && i != 0) {
    pre__e = L.elem[i - 1];
    return OK;
    }

    }

    return ERROR;

    }
    //获取当前元素的后继
    Status NextElem(Sqlist L, int cur_e, int next_e) {

    for (int i = 0; i < L.length; i++)
    {
    if (cur_e == L.elem[i] && i < L.length) {

    next_e = L.elem[i + 1];
    return OK;
    }

    }
    return ERROR;

    }
    //访问线性表中的所有元素
    Status ListTraverse(Sqlist L) {

    for (int i = 0; i < L.length; i++)
    {
    if (L.elem[i] == NULL) {

    return ERROR;
    }

    }

    return OK;
    }

    Status MergeList(Sqlist L, Sqlist L1, Sqlist *L2) {

    int *pa, *pb, *pc, *pa_last, *pb_last;
    pa = L.elem;
    pb = L1.elem;
    L2->listsize = L2->length = L.length + L1.length;

    pc = L2->elem = (int *)malloc(L2->length * sizeof(int));

    if (L2->elem == NULL) {
    exit(0);
    }

    pa_last = L.elem + L.length - 1;
    pb_last = L1.elem + L1.length - 1;
    while (pa <= pa_last&&pb <= pb_last)
    {
    if (*pa <= *pb) {
    *pc++ = *pa++;
    }
    else
    {
    *pc++ = *pb++;

    }

    }

    while (pa <= pa_last)
    {
    *pc++ = *pa++;

    }
    while (pb <= pb_last)
    {
    *pc++ = *pb++;

    }

    return OK;

    }

  • 相关阅读:
    netbeans中给jpanl添加背景图片制定代码的理解——匿名内部类继承父类
    关于 ASP.NET MVC 中的视图生成
    Python的descriptor (2)
    分享php中四种webservice实现的简单架构方法及实例
    Python 中的 is 和 id
    Python的OO思想
    Python异常记录
    Python单例模式研究
    Python基础笔记
    python 映射列表 学习
  • 原文地址:https://www.cnblogs.com/paulversion/p/7526939.html
Copyright © 2020-2023  润新知