• 第四周技术博客发表 线性表


    // 49.cpp : Defines the entry point for the console application.
    //
    #include "StdAfx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //顺序表动态存储结构 C语言代码实现
    #define add_Size 2    //动态扩展内存时,指明扩展的倍数
    typedef int DataType;
    typedef  struct List
    {
      DataType *data; //指向存储空间基地址
      int length;     //线性表已存放的数据元素个数
      int Max_Size;  //线性表可能达到的最大长度,当前分配的存储容量
    }SeqList ;

    int  InitList(struct List *L, int ml)////将线性表L初始化为空表,如果线性表申请内存空间成功,返回1,否则返回-1
    {
        /* 检查ms是否有效,若无效的则退出运行 */
     if(L==NULL) return -1;
        if(ml <= 0){
           return -1;  /* 执行此函数中止程序运行,此函数在stdlib.h中有定义 */
        }
      
        L->data = (DataType *)malloc(ml * sizeof(DataType));
        if(L->data==NULL){
           return -1;
        }
     L-> Max_Size = ml;    /* 设置线性表空间大小为ml */
        L->length = 0;
        return 1;
    }

    void DestroyList(SeqList &L){// 释放线性表L所占用的内存空间
        free(L.data);
     L.data=NULL;
     L.length=0;L.Max_Size=0;
    }

    void DestroyList(SeqList *L){// 释放线性表L所占用的内存空间
        free(L->data);
     L->data=NULL;
     L->length=0;L->Max_Size=0;
    }
    void ClearList(SeqList &L){  //将线性表L置为空表。
      L.length=0;
    }

    int Locate (struct List *L, DataType y)  /*按指定数据元素值y查找,如果找到返回该值位置,否则返回-1 */
    {
        int i;
        for(i = 0; i < L->length; i++){
            if(L-> data [i] == y){ //是否找到数据元素y
                return (i+1); /* 找到返回该值位置,注意数组的下标是从0开始,线性表的位置是从1开始*/
            }
        }
        return -1;  //没找到返回-1
    }

    void DispList(struct List *L)  //显示线性表L的所有数据元素
    {
        int i;
        for(i = 0; i < L->length; i++){
            printf("%d ", L ->data[i]);
        }
        printf(" ");
        return;
    }

    void againMalloc(struct List *L)  //动态扩展内存,即内存不够用时,重新分配更大的存储空间
    {   
        /* 空间扩展为原来的add_Size倍,并由p指针所指向,原内容被自动拷贝到p所指向的存储空间 */
        DataType *p=(DataType*)realloc(L->data,add_Size * L->Max_Size * sizeof(DataType));
        if(!p){    /* 分配失败则退出运行 */
            printf("存储空间分配失败! ");
            exit(1); /* 执行此函数中止程序运行,此函数在stdlib.h中有定义 */
        }
        L-> data = p;    /* 使list指向新线性表空间 */
        L-> Max_Size = add_Size * L->Max_Size;    /* 把线性表空间大小修改为新的长度 */
     return;
    }

    void InsList(struct List *L, int i, DataType y)   //在线性表L中第i个位置插入新的数据元素y。
    { int k;
        if(i < 1 || i > L->length + 1){    /* 若i越界则插入失败 */
            exit(1); /* 执行此函数中止程序运行,此函数在stdlib.h中有定义 */
        }
        if(L->length == L-> Max_Size){    /*若线性表存储空间已满, 重新分配更大的存储空间 */
            againMalloc(L);
        }
        for(k = L->length - 1; k >= i - 1; k--){
            L-> data [k + 1] = L-> data [k];  //线性表i位置的后继数据元素往后移
        }
        L-> data [i - 1] = y;//插入的数据元素
        L->length++;  // 成功加入数据元素,线性表L的长度要加1
     return;
      }


    DataType DelList(struct List *L, int i, DataType &y) //删除L的第i个数据元素,并用y返回其值。
    { int k;
     if(i < 1 || i > L->length + 1){    /* 若i越界则插入失败 */
      exit(1);
     }
     if(L->length == L-> Max_Size){    /*若线性表存储空间已满, 重新分配更大的存储空间 */
            againMalloc(L);
     }
     y=L->data[i];
     for (k=i;k<=L->length;k++)
      { L->data[k]=L->data[k+1];
      }
     L->length--;
        return y;
    }

    /* 返回线性表L中第i个元素的值,若i超出范围,则停止程序运行 */
    DataType GetData(struct List *L, int i)
    { int k;
     if(i < 1 || i > L->length + 1){    /* 若i越界则插入失败 */
      exit(1);
    return L->data[i];  
    }

    int EmptyList(SeqList L)
    {  //如果L为空表则返回1,否则返回0。
     if(i < 1 || i > L->length + 1)
     {    /* 若i越界则插入失败 */
      exit(1);
     }
      if (L->length)
      return 1;
       else
      return 0;
    }

    void main()
    {//验证
      SeqList L;
      InitList(&L,100);
      InsList(&L,1,99);
      InsList(&L,2,55);
      InsList(&L,3,44);
      InsList(&L,1,33);
      InsList(&L,2,22);
       DispList(&L);
      InsList(&L,6,'b');
       DispList(&L);
      InsList(&L,6,999);
      DispList(&L);
     

    }

  • 相关阅读:
    C++ 重载运算符简单举例
    Python 的几种推导式
    Linux 系统目录结构
    Shell 文件包含
    Shell 文件测试运算符
    Shell 函数定义与调用
    Shell 数组定义与获取
    C 语言精髓之变参函数
    Vim 字符串替换命令
    S5PV210 串口实验(中断方式)
  • 原文地址:https://www.cnblogs.com/youu/p/5317489.html
Copyright © 2020-2023  润新知