linux下使用vim实现基于静态数组的顺序表的一些基本操作
2018-03-15 23:15
871 查看
本篇博客将介绍实现基于静态数组的顺序表的一些基本操作:
初始化
尾插
尾删
头插
头删
在任意位置插入元素
删除任意位置元素
获取任意位置元素
修改任意位置元素
查找指定元素值的下标
删除所有元素
冒泡排序
本次介绍的编译平台是linux,编辑器是vim
为了实现静态数组的顺序表,我们需要建立一个结构体用来存放数组和数组中实际元素个数。
size_t
*size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
*
初始化
函数:void SeqListInit(SeqList* seqlist);
尾部插入
函数:void SeqListPushBack(SeqList* seqlist,SeqListType value)
尾部删除
函数:void SeqListPopBack(SeqList* seqlist)
头部插入
函数:void SeqListPushFront(SeqList* seqlist,SeqListType value)
头部删除
函数:void SeqListPopFront(SeqList* seqlist)
随机位置插入
void SeqListInsert(SeqList* seqlist,size_t pos,SeqListType value)
随机位置删除元素
函数:void SeqListErase(SeqList* seqlist,size_t pos)
获取任意位置元素
函数:int SeqListGet(SeqList* seqlist,size_t pos,SeqListType* value)
查找指定元素值的下标
函数:size_t SeqListFind(SeqList* seqlist,SeqListType to_find)
修改任意位置元素
函数:void SeqListSet(SeqList* seqlist, size_t pos, SeqListType value)
删除所有元素
函数:void SeqListRemoveAll(SeqList* seqlist,SeqListType to_remove)
冒泡排序
函数:void SeqListBubbleSort(SeqList* seqlist)
swap 函数:
初始化
尾插
尾删
头插
头删
在任意位置插入元素
删除任意位置元素
获取任意位置元素
修改任意位置元素
查找指定元素值的下标
删除所有元素
冒泡排序
本次介绍的编译平台是linux,编辑器是vim
为了实现静态数组的顺序表,我们需要建立一个结构体用来存放数组和数组中实际元素个数。
typedef struct SeqList { SeqListType data[SeqListMaxSize]; size_t size; } SeqList;
size_t
*size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
*
初始化
函数:void SeqListInit(SeqList* seqlist);
void SeqListInit(SeqList* seqlist){ if(seqlist == NULL){ return; } seqlist->size = 0; }
尾部插入
函数:void SeqListPushBack(SeqList* seqlist,SeqListType value)
void SeqListPushBack(SeqList* seqlist,SeqListType value){ //判断是否为非法输入 if( seqlist == NULL){ return; } //判断是否为满顺序表 if(seqlist->size == SeqListMaxSize){ return; } seqlist->data[seqlist -> size] = value; ++seqlist->size; return; }
尾部删除
函数:void SeqListPopBack(SeqList* seqlist)
void SeqListPopBack(SeqList* seqlist){ //判断是否为非法输入 if(seqlist == NULL){ return; } //判断是否为空顺序表,空顺序表无法删除 if(seqlist->size == 0){ return; } --seqlist->size; return; }
头部插入
函数:void SeqListPushFront(SeqList* seqlist,SeqListType value)
void SeqListPushFront(SeqList* seqlist,SeqListType value){ //非法输入 if(seqlist == NULL){ return; } //满顺序表 if(seqlist->size == SeqListMaxSize){ return; } ++seqlist->size; size_t i = seqlist->size - 1; for(; i > 0; --i){ seqlist->data[i] = seqlist->data[i-1]; } seqlist -> data[0] = value; return; }
头部删除
函数:void SeqListPopFront(SeqList* seqlist)
void SeqListPopFront(SeqList* seqlist){ size_t i = 0; //判断是否为非法输入 if(seqlist == NULL){ return; } //判断是否为空 if(seqlist == 0){ return; } //将数据整体前移 for(; i < seqlist->size - 1; i++){ seqlist->data[i] = seqlist->data[i+1]; } --seqlist->size; return; }
随机位置插入
void SeqListInsert(SeqList* seqlist,size_t pos,SeqListType value)
void SeqListInsert(SeqList* seqlist,size_t pos,SeqListType value){ //判断是否为非法输入 if(seqlist == NULL){ return; } //判断数组是否为满 if(seqlist->size == SeqListMaxSize){ return; } //判断要添加的位置是否在线性表之外 if(pos >= seqlist->size){ return; } ++seqlist->size; size_t i = seqlist->size - 1; //将要插入数据位置之后的数据整体后移 for(;i-1 >= pos; --i){ seqlist->data[i] = seqlist->data[i-1]; } //将数据插入线性表 seqlist->data[pos] = value; return; }
随机位置删除元素
函数:void SeqListErase(SeqList* seqlist,size_t pos)
void SeqListErase(SeqList* seqlist,size_t pos){ //判断是否非法输入 if(seqlist == NULL){ return; } //判断数组是否为空,为空不能删除 if(seqlist->size == 0){ return; } //判断要删除的位置是否在线性表之外 if(pos >= seqlist->size){ return; } size_t i = pos; 删除之后将剩下的数据整体前移 for(; i < seqlist->size - 1; i--){ seqlist->data[i] = seqlist->data[i+1]; } --seqlist->size; return; }
获取任意位置元素
函数:int SeqListGet(SeqList* seqlist,size_t pos,SeqListType* value)
int SeqListGet(SeqList* seqlist,size_t pos,SeqListType* value){ //判断是否为非法输入 if(seqlist == NULL){ return 0; } //判断获取元素的位置是否超出范围 if(pos >= seqlist->size){ return 0; } //将指定位置的元素值赋给value *value = seqlist->data[pos]; return 1; }
查找指定元素值的下标
函数:size_t SeqListFind(SeqList* seqlist,SeqListType to_find)
size_t SeqListFind(SeqList* seqlist,SeqListType to_find){ //判断是否为非法输入 if(seqlist == NULL){ return; } //遍历寻找指定元素 size_t pos = 0; for(;pos < seqlist->size;++pos){ if(seqlist->data[pos] == to_find){ return pos; } } return -1; }
修改任意位置元素
函数:void SeqListSet(SeqList* seqlist, size_t pos, SeqListType value)
void SeqListSet(SeqList* seqlist, size_t pos, SeqListType value){ //判断是否为非法输入 if (seqlist == NULL){ return; } //判断位置是否超出范围 if(pos >= seqlist->size){ return; } //将设置的值赋值给数组的指定位置 seqlist->data[pos] = value; return; }
删除所有元素
函数:void SeqListRemoveAll(SeqList* seqlist,SeqListType to_remove)
void SeqListRemoveAll(SeqList* seqlist,SeqListType to_remove){ //判断是否为非法输入 if(seqlist == NULL){ return; } //按顺序查找指定元素,找一个删一个,直到查到数组结束 size_t pos = 0; do{ pos = SeqListFind(seqlist,to_remove); SeqListErase(seqlist,pos); }while(pos < seqlist->size - 1); }
冒泡排序
函数:void SeqListBubbleSort(SeqList* seqlist)
void SeqListBubbleSort(SeqList* seqlist){ //判断是否为非法输入 if(seqlist == NULL){ return; } //设置冒泡趟数 size_t count = 0; for(;count < seqlist->size;++count){ size_t cur = 0; //按顺序比较大小,将较大的元素交换到队尾 for(;cur < seqlist->size - 1 - count;++cur){ if(seqlist->data[cur] > seqlist->data[cur + 1]){ Swap(&seqlist->data[cur],&seqlist->data[cur + 1]); } } } return; }
swap 函数:
void Swap(SeqListType* a,SeqListType* b){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
相关文章推荐
- 实现基于静态数组的顺序表的以下基本操作:
- 基于静态数组的顺序表的一些基本操作(2)
- 实现基于静态数组的顺序表的以下基本操作:
- 基于静态数组的顺序表的一些基本操作(1)
- 实现基于静态数组的顺序表的以下基本操作(进阶部分)
- 实现基于静态数组的顺序表的以下基本操作:
- !-- 基于静态数组的顺序表相关操作C语言实现 --!
- 静态数组顺序表的基本操作实现
- 基于静态数组的顺序表的基本操作
- 基于顺序栈的基本操作的实现
- 13数组实现顺序堆栈的基本操作
- linux下 vi(vim)的基本操作使用
- 数组的实现和一些基本操作
- 顺序表的基本操作——静态实现
- 实现基于静态数组的顺序表
- 实现基于静态数组的顺序表
- 链表的可变数组的实现和一些基本操作
- Linux — vim的基本使用操作与文件配置
- linux vim 编辑器的一些基本操作
- linux 目录结构+常用命令+压缩命令+vim使用+及一些基础知识(非常好)