线性表的顺序存储实现(一)顺序表

1|0静态分配存储空间

1|1定义

#include <stdio.h> #include <stdlib.h> // malloc 、free //***线性表的 顺序存储-> 顺序表的定义*** //静态分配存储空间 #define MaxSize 50 typedef struct { int data[MaxSize]; int length; //数组当前元素个数 }SqList;

1|2初始化

void InitList(SqList &L) { L.length = 0; for(int i=0; i<MaxSize; i++) // 可省略 { L.data[i] = 0; } }

1|3

//***插入操作 bool ListInsert(SqList &L, int i, int e) { if (i < 1 || i > L.length + 1) // 判断i的范围是否有效 不可插入无前驱也无后继的空位置 { return false; } if (L.length >= MaxSize) // 空间已满无法插入 { return false; } for(int j = L.length; j >= i; j--) // 第i位 及 之后元素后移 { L.data[j] = L.data[j-1]; } L.data[i-1] = e; // 在位置i 放入e L.length++; return true; }

1|4

//***删除操作 bool ListDelete(SqList &L, int i, int &e) // 被删除元素赋值给e 并返回 { if (i<1 || i>L.length) { return false; } e = L.data[i-1]; for (int j=i; j<L.length; j++) // 第i+1位 及 之后元素前移 { L.data[j-1] = L.data[j]; } L.length--; // 线性表长度减少1 return true; }

1|5

//***按值查找 int LocateElem(SqList L, int e) { int i; for(i=0; i<L.length; i++) { if(L.data[i] == e) { return i + 1; // 返回元素位序 } } return 0; // 查找失败 }

1|6打印

//***打印顺序表 void PrintList(SqList L) { printf("the sqlist Length is:%d\n", L.length); for(int i=0; i<L.length; i++) { printf("ID: %d L.data[%d] = %d \n", i+1, i, L.data[i]); } puts("\n"); }

2|0动态分配存储空间

2|1定义

#include <stdio.h> #include <stdlib.h> // malloc 、free //***线性表的 顺序存储-> 顺序表的定义*** //动态分配存储空间 #define InitSize 100 // 默认的最大长度 typedef struct { int *data; // 指向动态分配数组的指针 int maxsize; // 顺序表最大容量 int length; // 顺序表当前长度 }SeqList;

2|2初始化

void InitList(SeqList &L) { L.data = (int *)malloc(InitSize*sizeof(int)); L.length = 0; L.maxsize = InitSize; }

2|3动态扩展空间

void IncreaseSize(SeqList &L, int len) //增加动态数组长度 每次增加指定长度len { int *p = L.data; L.data = (int *)malloc((L.maxsize+len)*sizeof(int)); for(int i=0; i<L.length; i++) { L.data[i] = p[i]; // 将数据复制到新空间 } L.maxsize = L.maxsize + len; // 顺序表最大长度增加 len free(p); // 释放原来的内存空间 }

2|4

//***插入操作 bool ListInsert(SeqList &L, int i, int e) { if (i < 1 || i > L.length + 1) // 判断i的范围是否有效 不可插入无前驱也无后继的空位置 { return false; } if (L.length >= L.maxsize) // 空间已满无法插入 { return false; } for(int j = L.length; j >= i; j--) // 第i位 及 之后元素后移 { L.data[j] = L.data[j-1]; } L.data[i-1] = e; // 在位置i 放入e L.length++; return true; }

2|5

//***删除操作 bool ListDelete(SeqList &L, int i, int &e) // 被删除元素赋值给e 并返回 { if (i<1 || i>L.length) { return false; } e = L.data[i-1]; for (int j=i; j<L.length; j++) // 第i+1位 及 之后元素前移 { L.data[j-1] = L.data[j]; } L.length--; // 线性表长度减少1 return true; }

2|6

//***按值查找 int LocateElem(SqList L, int e) { int i; for(i=0; i<L.length; i++) { if(L.data[i] == e) { return i + 1; // 返回元素位序 } } return 0; // 查找失败 }//***按值查找 int LocateElem(SeqList L, int e) { int i; for(i=0; i<L.length; i++) { if(L.data[i] == e) { return i + 1; // 返回元素位序 } } return 0; // 查找失败 }

2|7打印

//***打印顺序表 void PrintList(SeqList L) { printf("the seqlist Length is:%d\n", L.length); for(int i=0; i<L.length; i++) { printf("ID: %d L.data[%d] = %d \n", i+1, i, L.data[i]); } puts("\n"); }

__EOF__

本文作者HUGBOY
本文链接https://www.cnblogs.com/hugboy/p/16257831.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   HUGBOY  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-05-11 Linux 操作系统(一)命令&用户&权限
点击右上角即可分享
微信分享提示