• 线性表(顺序表的创建)


    // orderList.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.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(EOVERFLOW);
    }
    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;
    }

  • 相关阅读:
    Python字符编码补充
    shell脚本自动部署及监控
    【Linux】应用程序内存段布局
    【Linux】Core dump故障分析
    【Linux】GDB程序调试
    【Linux】小应用 大智慧
    【嵌入式】安装Linux系统到开发板
    【读书笔记】高效演讲
    【Linux】GCC编译
    【Linux】Linux 找回Root用户密码
  • 原文地址:https://www.cnblogs.com/paulversion/p/7511865.html
Copyright © 2020-2023  润新知