数据结构代码笔记 2顺序表

数据结构代码笔记 2顺序表,第1张

//案例
//2.2 稀疏多项式的计算
//结构体嵌套写法
#define MAXSIZE 100  //多项式可能达到最大长度
typedef struct 
{
    float coef;  //系数
    int expn;    //指数
}Polynomial;
typedef struct 
{
    Polynomial *elem;  //存储空间基地址
    int length;  //多项式中当前项的个数
}Sqlist; //多项式的顺序存储类型

//2.3 图书表
#define MAXSIZE 10000  //图书表可能达到最大长度
typedef struct 
{
    char no[20];   //图书ISBN
    char name[50];    //图书名称
    float price;   //图书价格
}Book;
typedef struct 
{
    Book *elem;  //存储空间基地址
    int length;  //图书表中当前图书的个数
}Sqlist; 
//顺序表
#include
#include//malloc函数的头文件
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ET;

#define MAXSIZE 100 //顺序表能达到的最大长度

typedef struct //用结构体表示顺序表Sqlist
{
    ET *elem; //存储空间的基地址
    //elem为数组指针,初始化后数组空间会由动态分配得到,可以用elem + n得到数组元素
    //可以将elem看作数组名,但其实与数组名有差别,《彻底搞定c指针》这本书有讲
    ET data[MAXSIZE];//也可以存放数组元素。


这两种当中选一种就好了 int length; //顺序表当前长度 } Sqlist; //这里注意一下,用c写的话把&改成*,L.elem改成L->elem //算法2.1 初始化动态分配存储空间 Status InitList(Sqlist *L)//构造一个空的线性表L { L->elem =(ET *)malloc(sizeof(ET)*MAXSIZE); //(ET *)是强制转换类型为ET。


在空间中动态分配出MAXSIZE个ET的空间给线性表L if(! L->elem) exit(OVERFLOW); //如果分配失败,就退出并返回OVERFLOW L->length = 0;//分配成功就能走到这一步,因为此时L为空表,所以当前长度为0 return OK;//分配成功,返回OK }; //算法2.2 顺序表的取值 Status GetElem(Sqlist L, int i, ET *e) {//在顺序表L中取第i个值并赋值到e if(i<1||i>L.length) return ERROR; //检测i的值是否合理,不合理返回ERROR e = L.elem[i-1]; //合理就取值,注意数组下标从0开始,所以要-1 return OK; } //算法2.1和2.2中的L并不一样 //2.1中L是指向结构体的指针,取值用-> //2.2中L是结构体,取值用. //2.2中e也用了指针,与2.1中的L一样,在函数中进行 *** 作是可以改变的 //算法2.3 顺序表的查找 //注意Status和int的区别。


虽然Status也是int类型,但是Status返回的是状态,int则返回的是数字 int LocateElem(Sqlist L, ET e) {//在顺序表L中查找e for(int i=0;iL->length+1) return ERROR;//i不合理,返回ERROR if(L->length==MAXSIZE) return ERROR;//当前线性表已满,返回ERROR for(int j=L->length-1;j>=i;j-- ) L->elem[j+1] = L->elem[j]; //从最后一个元素到第i个元素每个元素都往后移动 L->elem[i-1]=e;//第i个元素赋值为e ++L->length;//当前长度加1 return OK; } //算法2.5 删除 Status ListDelete(Sqlist *L, int i) {//删除顺序表L中的第i个元素 if(i<1||i>L->length) return ERROR;//i不合理,返回ERROR for(int j=i;jlength;j++) L->elem[i-1] = L->elem[i]; //从第i个元素到最后一个元素每个元素都往前移动 --L->length;//当前长度减1 return OK; }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存