2019-02-03 线性表的顺序储存结构C语言实现
2024-10-09 06:31:49
#include<cstdio>
#define MAXSIZE 20
typedef int Elemtype; //Elemtype类型根据实际情况而定,这里取int
typedef struct
{
int data[MAXSIZE];
int length;
}Sqlist; //线性表的顺序储存结构
//线性表的抽象数据类型
Sqlist InitList(Sqlist* L) //初始化建立一个空表
{
Sqlist list;
L->length = 0;
list.length = L->length;
for(int i=0;i<MAXSIZE;++i)
list.data[i] = 0;
return list;
}
bool ListEmpty(Sqlist* L){ //若线性表为空返回true不然返回false
if(L->length==0) return true;
return false;
}
bool ClearList(Sqlist *L) //清空线性表
{
for(int i=0;i<MAXSIZE;++i)
L->data[i] = 0;
return true;
}
bool GetElem(Sqlist L,int i,Elemtype* e) //将线性表的第i个位置元素返回给e,若不存在返回false
{
if(L.length==0 || i<1 || i>L.length)
return false;
*e = L.data[i-1]; //因为return返回状态,故这里用指针实现
return true;
}
int LocateElem(Sqlist* L,Elemtype e) //在线性表L中查找与给定值e相等的元素,若查找成功,返回该元素在表中的标号表示成功;否则返回0表示失败
{
for(int i=0;i<L->length;++i)
{
if(L->data[i] == e) return i;
}
return false;
}
bool ListInsert(Sqlist* L,int i,Elemtype e) //在线性表L中的第i个位置插入新元素e
{
int k;
if(L->length == MAXSIZE)
return false;
if(i<1 || i>L->length)
return false;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--) //将要插入位置之后的数据依次后移
L->data[k+1] = L->data[k];
}
L->data[i-1] = e; //插入元素e
L->length++; //长度+1
return true;
}
bool ListDelete(Sqlist* L,int i,Elemtype* e) //删除线性表L中的第i个位置元素,并用e返回其值
{
int k;
if(L->length == 0)
return false;
if(i<1 || i>L->length)
return false;
*e = L->data[i-1];
if(i<L->length) //删除位置后继元素前移
{
for(k=i;k<L->length;k++)
L->data[k-1] = L->data[k];
}
L->length--;
return true;
}
int ListLength(Sqlist *L) //返回线性表L的元素个数
{
int k=0;
for(int i=0;i<MAXSIZE;++i)
{
if(L->data[i] != 0) ++k;
}
L->length = k;
return k;
}
}
线性表的顺序结构及基本操作
虽然很简单,但是因为我菜,还是弄了蛮久
遇到的两个问题:
Elemtype* e = NULL;
//之后函数里给e赋值,就崩了,原来空指针是不能进行赋值操作的
//改为:
Elemtype a;
Elemtype* e = a;
//ok了
还有一个问题待解决:
我这里计算线性表长度的时候是计算了非0元素的个数,初始化时把线性表元素默认初始化为0了,不知道有没有什么好的解决方法,但是链式储存应该就不会有此类问题了(明天再玩)
就酱
最新文章
- Nginx实现多域名证书HTTPS
- ubuntu 上安装字体
- DFD
- 批处理学习:for语句详解【经典】
- Sql Server2005恢复备份数据库问题-Error:3154 3219
- Web分布式部署,跨应用程序Forms身份验证的集成方案
- hadoop家族之mahout安装
- MFC对话框中解决回车键、ESC键退出的方法
- APP案例分析
- [LeetCode] Design In-Memory File System 设计内存文件系统
- 在lnmp环境下,将原来的PHP7.0升级到PHP7.2
- C#4.5-4.7学习总结
- TCP输出和UDP输出
- 在Centos 6.5 X64下切割m3u8
- Java冒泡具体的原理,以及下标的变化
- SqlServer 凭据
- 某C电面记
- intel-FPGA的片内存储器问题
- mysql主从同步碰到的问题
- Agc017_D Game on Tree
热门文章
- 最小生成树 状压+prim hdu2489
- 一个茴字有三种写法——吐槽C#9.0的Records
- Cube-UI组件中create-api 模块的基本使用
- Ajax长轮询(LongPoll)
- 第11章 支撑向量机SVM
- eatwhatApp开发实战(五)
- 【转】B树、B+树、B*树、R 树、QuadTree
- DDD之1微服务设计为什么选择DDD
- 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
- ES6-for...of与for...in