数据结构(1)线性表之顺序表的表示和实现

前言

这几天复习数据结构有关的东西,光看课本真是很枯燥了,于是找了些资料搭配来看。一个是程杰老师的《大话数据结构》,很有名的一本书(老师给我们上数据结构的时候就推荐过,不过当时没看),这几天看了的确很通俗易懂,比课本讲得生动些。另一个是在51CTO学院里找的鲍松山老师的视频课程,讲得也很不错,我有一些代码的实现跟课本上有区别,因为主要是跟着他的视频写的。
附:课程地址数据结构严蔚敏C语言版-手把手教你实现数据结构视频课程

线性表

  • 概念:由n(n>=0)个数据特性相同的元素构成的有限序列,其中线性表中元素的个数n(n>=0)定义为线性表的长度,n=0时称线性表为空表

  • 特点:

    1. 存在唯一的一个被称作“第一个”的数据元素

    2. 存在唯一的一个被称作“最后一个”的数据元素

    3. 除第一个外,结构中的每个数据元素均只有一个前驱

    4. 除最后一个外,结构中的每个数据元素均只有一个后继

线性表的顺序表示

  • 概念:用一组地址连续的存储单元依次存储线性表的数据元素(也称为线性表的顺序存储结构或顺序映像)
  • 特点:逻辑上相邻的数据元素,其物理次序也是相邻的

实现的操作

  • 初始化顺序表
  • 为顺序表增配空间
  • 展示顺序表
  • 从尾部插入
  • 从头部插入
  • 按位置插入
  • 从尾部删除
  • 从头部删除
  • 按位置删除
  • 按值删除
  • 按值查找数据
  • 排序
  • 倒换表的顺序
  • 提供顺序表的长度
  • 清除所有数据
  • 摧毁

概念都是课本上的,代码都是自己敲的,因为写的时候注释写得比较详细,加上这部分内容算比较简单,就没有额外分析什么。所有代码均在vc++6.0环境下编译通过并可成功运行。
附:运行时截图
截图1
j截图2

全部代码

工程图

工程图

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)</
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值