数据结构(1)线性表之顺序表的表示和实现
前言
这几天复习数据结构有关的东西,光看课本真是很枯燥了,于是找了些资料搭配来看。一个是程杰老师的《大话数据结构》,很有名的一本书(老师给我们上数据结构的时候就推荐过,不过当时没看),这几天看了的确很通俗易懂,比课本讲得生动些。另一个是在51CTO学院里找的鲍松山老师的视频课程,讲得也很不错,我有一些代码的实现跟课本上有区别,因为主要是跟着他的视频写的。
附:课程地址数据结构严蔚敏C语言版-手把手教你实现数据结构视频课程
线性表
-
概念:由n(n>=0)个数据特性相同的元素构成的有限序列,其中线性表中元素的个数n(n>=0)定义为线性表的长度,n=0时称线性表为空表
-
特点:
-
存在唯一的一个被称作“第一个”的数据元素
-
存在唯一的一个被称作“最后一个”的数据元素
-
除第一个外,结构中的每个数据元素均只有一个前驱
-
除最后一个外,结构中的每个数据元素均只有一个后继
-
线性表的顺序表示
- 概念:用一组地址连续的存储单元依次存储线性表的数据元素(也称为线性表的顺序存储结构或顺序映像)
- 特点:逻辑上相邻的数据元素,其物理次序也是相邻的
实现的操作
- 初始化顺序表
- 为顺序表增配空间
- 展示顺序表
- 从尾部插入
- 从头部插入
- 按位置插入
- 从尾部删除
- 从头部删除
- 按位置删除
- 按值删除
- 按值查找数据
- 排序
- 倒换表的顺序
- 提供顺序表的长度
- 清除所有数据
- 摧毁
注
概念都是课本上的,代码都是自己敲的,因为写的时候注释写得比较详细,加上这部分内容算比较简单,就没有额外分析什么。所有代码均在vc++6.0环境下编译通过并可成功运行。
附:运行时截图
全部代码
工程图
SeqList.h头文件存放顺序表有关数据的定义和操作函数的声明
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
//初始化时定义的顺序表大小
#define SEQLIST_INIT_SIZE 8
//新增配的顺序表空间的大小
#define INC_SIZE 3
//顺序表内的数据类型
typedef int ElemType;
typedef struct SeqList{
//指向顺序表的真实空间
ElemType *base;
//容量
int capacity;
//大小
int size;
}SeqList;
//增加顺序表空间
bool Inc(SeqList *list);
//初始化顺序表
void InitSeqList(SeqList *list);
//1.尾部插入
void push_back(SeqList *list, ElemType x);
//2.头部插入
void push_front(SeqList *list, ElemType x);
//3.展示顺序表
void show_list(SeqList *list);
//4.从尾部删除
void pop_back(SeqList *list);
//5.从头部删除
void pop_front(SeqList *list);
//6.按位置插入
void insert_pos(SeqList *list, int pos,ElemType x);
//7.按值查找数据
int find(SeqList *list,ElemType key);
//8.提供顺序表的长度
int get_length(SeqList *list);
//9.按位置删除数据
void delete_pos(SeqList *list, int pos);
//10.按值删除数据
void delete_val(SeqList *list, ElemType x);
//11.排序
void sort(SeqList *list);
//12.倒换表的顺序
void resver(SeqList *list);
//13.清除
void clear(SeqList *list);
//14.摧毁
void destroy(SeqList *list);
#endif //__SEQLIST_H__
SeqList.cpp文件存放操作函数的实现
#include"SeqList.h"
//初始化顺序表
void InitSeqList(SeqList *list){
list->base = (ElemType *)malloc(sizeof(ElemType) * SEQLIST_INIT_SIZE);
assert(list->base !=NULL);
list->capacity = SEQLIST_INIT_SIZE;
list->size = 0;
}
//增加顺序表空间
bool Inc(SeqList *list){
ElemType *newBase = (ElemType *)realloc( list->base,sizeof(ElemType) * (list->capacity + INC_SIZE));
//判断是否分配失败
if(newBase == NULL)</