1 顺序表 ADT
+ Status InitList(SeqList &L) 初始化顺序表
+ void printList(SeqList L) 遍历顺序表
+ int ListLength(SeqList L) 获得表长
+ Status GetElement(SeqList L, int i, ElementType &e) (按位)取值
+ int LocateElement(SeqList L, ElementType e) (按值)查找
+ Status ListInsert(SeqList &L, int i, ElementType e) (按位)插入
+ Status ListDelete(SeqList &L, int i) (按位)删除
2 编程实现
2.1 定义基础数据类型
ElementType (数据元素类型/结构体)
struct ElementType {
char data; // char -> ElementType bool operator==(const ElementType b) const{ // 重载结构体 ElementType 的运算符
return this->data == b.data;
} bool operator!=(const ElementType b) const{
return this->data != b.data;
}
};
Status (状态/枚举类型)
enum Status { ERROR, OK, OVERFLOW };
SeqList (顺序表/结构体)
#define MAXSIZE_SEQLIST 100 typedef struct{
ElementType *elements; // 存储空间的基地址
int length; // 当前长度
} SeqList; // 线性表之顺序表
2.2 初始化顺序表
Status InitList(SeqList &L)
Status InitList(SeqList &L){
L.elements = new ElementType[MAXSIZE_SEQLIST]; //为顺序表分配一个大小为MAXSIZE的数组空间
if(!L.elements){
exit(OVERFLOW); // 存储分配失败 -> (异常)退出
}
L.length = 0;
return OK;
}
2.3 遍历顺序表
void printList(SeqList L)
void printList(SeqList L){
printf("[SeqList.h#printList] L.length: %d\n", L.length);
printf("[SeqList.h#printList] L.elements: \t");
for(int i=0; i< L.length; i++){
printf("%c \t", L.elements[i]);
}
printf("\n");
}
2.4 获得表长
int ListLength(SeqList L)
int ListLength(SeqList L){
return L.length;
}
2.5 (按位)取值
Status GetElement(SeqList L, int i, ElementType &e)
Status GetElement(SeqList L, int i, ElementType &e){
if(i<1 || i>L.length){ // 判断i值是否合理,若不合理:返回 ERROR
return ERROR;
}
e = L.elements[ i-1 ]; // 赋值; elements[i-1] 单元存储的第 i 个数据元素
return OK;
}
2.6 (按值)查找
int LocateElement(SeqList L, ElementType e)
int LocateElement(SeqList L, ElementType e){
for(int i=0; i<L.length; i++){
if(L.elements[i] == e){ //(前提:已重载结构体 ElementType 的'=='运算符)
return i+1;
}
}
return -1;
}
2.7 (按位)插入
Status ListInsert(SeqList &L, int i, ElementType e)
Status ListInsert(SeqList &L, int i, ElementType e){
if(i<1 || i>L.length+1){ // i 值不合法 (易错: 忘记 +1)
return ERROR;
}
if(L.length == MAXSIZE_SEQLIST){ // 当前存储空间已满
return ERROR;
}
for(int j=L.length; j>=i; j--){ // 插入位置 及之后的元素后移
L.elements[j] = L.elements[j-1];
}
L.elements[i-1] = e; //将新元素 e 放入 第 i 个位置
L.length += 1; //表长 + 1
return OK;
}
2.8 (按位)删除
Status ListDelete(SeqList &L, int i)
Status ListDelete(SeqList &L, int i){
if(i<1 || i>L.length){ // i 值不合法
return ERROR;
}
for(int j=i-1; j<=L.length-1; j++){ // 删除位置 及之后的元素前移
L.elements[j] = L.elements[j+1];
}
L.length -= 1;
return OK;
}
3 测试运行(Main.cpp)
#include <stdio.h>
//#include <iostream.h>
#include <iostream>
using namespace std; #include "base.h"
#include "SeqList.h" int main(){
SeqList L; // 顺序表 InitList(L); ElementType e;
e.data = 'F';
ListInsert(L, 1, e);
printList(L); e.data = 'G';
ListInsert(L, 1, e);
printList(L); Status status = GetElement(L, 1, e);
printf("status: %d\n", status); status = ListDelete(L, 1);
printList(L); printElementType(e); return 0;
}
运行结果
[SeqList.h#printList] L.length: 1
[SeqList.h#printList] L.elements: F
[SeqList.h#printList] L.length: 2
[SeqList.h#printList] L.elements: G F
status: 1
[SeqList.h#printList] L.length: 1
[SeqList.h#printList] L.elements: F
[base.h#printElementType] ElementType.data: G
4 参考资料
1 《数据结构(C语言版 第二版)》.严蔚敏.李冬梅.吴伟民
[C++]数据结构:线性表之顺序表的更多相关文章
-
[数据结构 - 第3章] 线性表之顺序表(C++实现)
一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...
-
C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
-
数据结构Java实现02----线性表与顺序表
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
-
数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...
-
[C++]线性链表之顺序表<;一>;
顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 ...
-
c/c++ 线性表之顺序表
线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...
-
[C++]线性链表之顺序表<;二>;
/* @content 线性链表之顺序表 @date 2017-3-21 1:06 @author Johnny Zen */ /* 线性表 顺序表 链式表[带头指针/不 ...
-
python基础下的数据结构与算法之顺序表
一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表 ...
-
线性表之顺序表C++实现
线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...
随机推荐
-
this class is not key value coding-compliant for the key XXX错误的解决方法
转自:http://www.cnblogs.com/zhangronghua/archive/2012/03/16/iOSError1.html 今天在听iOS开发讲座时,照着讲座的demo输入代码, ...
-
jquery实现密码框显示提示文字
jquery实现密码框提示文字的功能. 代码: <html> <head> 3 <title>登录-jquery实现密码框显示文字-www.jbxue. ...
-
C#获取数据库中的Instance
如果我现在要写个代码生成器,连接数据库,那你得知道有哪些Database存在吧,不然咋整? 在VS中我们添加一个ADO.NET的实体模型 在选择数据库名称的时候就是获取了数据库中Database In ...
-
HDU 5289 Assignment (数字序列,ST算法)
题意: 给一个整数序列,多达10万个,问:有多少个区间满足“区间最大元素与最小元素之差不超过k”.k是给定的. 思路: 如果穷举,有O(n*n)复杂度.可以用ST算法先预处理每个区间最大和最小,O(n ...
-
ASC #1
开始套题训练,第一套ASC题目,记住不放过每一题,多独立思考. Problem A ZOJ 2313 Chinese Girls' Amusement 循环节 题意:给定n,为圆环长度,求k < ...
-
今天,安装了一个GANGLIA玩玩,以后再测试NAGIOS吧。
说不定以后派得上用场呢.. 还有,NGINX也要学,不能老是凭站IIS,APACHE混饭吃吧,现在它都这么流行了..新浪,网易,腾讯.
-
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <;machineKey>;
转自:http://hi.baidu.com/taotaowyx/blog/item/074bb8d83907bb3233fa1ce6.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群 ...
-
JS 事件冒泡整理 浏览器的事件流
JavaScript与HTML的交互通过事件来实现.而浏览器的事件流是一个非常重要的概念.不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议, 只需要知道在DOM2中规定的事件流包括了三个部分,事件捕 ...
-
ffmpeg 视频转ts切片 生成m3u8视频播放列表
近期做视频点播,要求将视频文件切片成ts文件.经搜索得到以下两个命令,可完成这个任务. 一 首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件 1.可以预先使用ffprob ...
-
Fedora 20 安装搜狗拼音输入法
1.卸载ibus sudo yum remove ibus gsettings set org.gnome.settings-daemon.plugins.keyboard active fal ...