#pragma once
#define MAX_SIZE 10
typedef unsigned int size_t;
typedef int DataType;
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include <stdlib.h>
#define MAX 100

typedef struct SeqList
{
DataType arr[MAX];
int sz; // 顺序表中有效元素的个数
}SeqList, *pSeqList;

//typedef struct SeqList SeqList;

///
// .h
// 初始化顺序表
void InitSeq(pSeqList pSeq)//初始化顺序表
{
assert(pSeq);
memset(pSeq->arr, 0, sizeof(DataType)*MAX);
pSeq->sz = 0;
}
// 尾插
void PushBack(pSeqList pSeq, DataType x)//尾插
{
assert(pSeq);
if (pSeq->sz == MAX)
{
printf("顺序表已满\n");
exit(EXIT_FAILURE);
}
pSeq->arr[pSeq->sz] = x;
++pSeq->sz;
}

// 尾删
void PopBack(pSeqList pSeq)//尾删
{
assert(pSeq);
if (pSeq->sz == 0)
{
printf("顺序表没有元素;不可删除\n");
exit(EXIT_FAILURE);
}
--pSeq->sz;
}

// 头插
void PushFront(pSeqList pSeq, DataType x)//头插
{
int i = 0;
assert(pSeq);
if (pSeq->sz == MAX)
{
printf("顺序表已满\n");
exit(EXIT_FAILURE);

}

for (i = pSeq->sz; i>0; --i)
{
pSeq->arr[i] = pSeq->arr[i - 1];
}
pSeq->arr[0] = x;
++pSeq->sz;
}

// 头删
void PopFront(pSeqList pSeq)//头删
{
int i = 0;
assert(pSeq);
if (pSeq->sz == 0)
{
printf("顺序表没有元素;不可删除\n");
exit(EXIT_FAILURE);

}
for (i = 0; i<pSeq->sz - 1; ++i)
{
pSeq->arr[i] = pSeq->arr[i + 1];
}
--pSeq->sz;
}

// 任意位置中插入值为data的元素
void Insert(pSeqList pSeq, int pos, DataType x)//在顺序表某位置插入某个特定元素
{
int i = 0;
assert(pSeq);
if (pSeq->sz == MAX)
{
printf("顺序表已满\n");
exit(EXIT_FAILURE);
}
if (pos >= MAX)
{
printf("插入位置不合适\n");
exit(EXIT_FAILURE);
}

for (i = pSeq->sz; i>pos; --i)
{
pSeq->arr[i] = pSeq->arr[i - 1];
}
pSeq->arr[pos] = x;
++pSeq->sz;
}

// 删除任意位置中的元素
void SeqListErase(pSeqList pSeq, int pos)
{
int i = 0;
assert(pSeq);
if (Empty(pSeq))
{
printf("顺序表为空\n");
return;
}
if (pos < 0 || pos >= pSeq->sz)
{
printf("%d 位置非法\n");
return;
}
for (i = pos; i < pSeq->sz - 1; i++)
{
pSeq->arr[i] = pSeq->arr[i + 1];
}
pSeq->sz--;
}

// 在顺序表中查找值为data的元素,返回该元素在顺序表中的下标
//int SeqListFind(pSeqList ps, DataType data);
int SeqListFind(pSeqList pSeq, int value)
{
assert(pSeq);
size_t i = 0;
for (i = 0; i < pSeq->sz; i++)
{
if (pSeq->arr[i] == value)
{
return i;//返回数组下标
}
}
return -1;
}

// 删除顺序表中值为data的元素
void Remove(pSeqList pSeq, DataType data)
{
int i = 0;
int j = 0;
assert(pSeq);
if (pSeq->sz == 0)
{
printf("顺序表为空;不可删除\n");
exit(EXIT_FAILURE);
}
for (i = 0; i < (pSeq->sz); ++i)
{
if (pSeq->arr[i] == data)
{
for (j = i; j<pSeq->sz - 1; ++j)
{
pSeq->arr[j] = pSeq->arr[j + 1];
}
--pSeq->sz;
break;
}
}
return;
}

// 删除顺序表中所有值为data的元素
void RemoveAll(pSeqList pSeq, DataType x)
{
int i = 0;
int j = 0;
assert(pSeq);
if (pSeq->sz == 0)
{
printf("顺序表没有元素;不可删除\n");
exit(EXIT_FAILURE);
}
for (i = 0; i<pSeq->sz; ++i)
{
if (pSeq->arr[i] == x)
{
for (j = i; j<pSeq->sz - 1; ++j)
{
pSeq->arr[j] = pSeq->arr[j + 1];
}
--pSeq->sz;//记得--元素个数;要不然上增循环会越界;
/*删除元素以后(后面覆盖前面),记得将下标回到前一位置;
再次进入循环,i会走到刚才的位置;现在是新的元素;这样可以
避免漏检查元素,可以有效删除出相连相同的元素;*/
i = i - 1;
}
}
return;
}

// 判断顺序表是否为空
int SeqListEmpty(SeqList* seqlist)//返回该顺序表是否为空,为空返回1,否则返回0
{
if (seqlist == NULL) {
return;
}
if (seqlist->sz == 0) {
return 1;
}
else
return 0;

}

// 获取顺序表中元素的个数
size_t SeqListSize(SeqList* seqlist)//返回该顺序表的个数
{

if (seqlist == NULL) {
return;
}
return seqlist->sz;

}

/
// 辅助操作
// 打印顺序表中的元素
void Print(SeqList *seq)
{
assert(seq);
size_t i = 0;
for (i = 0; i < seq->sz; i++)
{
printf("%d->", seq->arr[i]);
}
}

// 用冒泡排序对顺序表中的元素进行排序
void SeqListBubbleSort(SeqList* seqlist)//冒泡排序
{

if (seqlist == NULL) {
return;
}
if (seqlist->sz == 1) {
return;
}
int i = 0;
for (i = 0; i<seqlist->sz - 1; i++) {
int j = 0;
for (j = 0; j<seqlist->sz - 1 - i; j++) {
if (seqlist->arr[j]>seqlist->arr[j + 1]) {
DataType tmp = seqlist->arr[j];
seqlist->arr[j] = seqlist->arr[j + 1];
seqlist->arr[j + 1] = tmp;
}
}
}
}

// 用选择排序对顺序表中的元素进行排序
void SelectSort(int* arr, int sz);
void SelectSort(SeqList *seq)
{
assert(seq);
size_t i = 0;
size_t j = 0;
for (i = 0; i < seq->sz; i++)
{
size_t min = i;
for (j = i + 1; j < seq->sz; j++)//找到每次最小值
{
if (seq->arr[min] > seq->arr[j])
{
min = j;
}
}

if (i != min)
{
/*DataType t = seq->data[min];
seq->data[min] = seq->data[i];
seq->data[i] = t;*/
seq->arr[min] ^= seq->arr[i];
seq->arr[i] ^= seq->arr[min];
seq->arr[min] ^= seq->arr[i];

}
}
}

// 选择排序优化---一次找出最大最小元素所在的位置
void SelectSort_OP(int* arr, int sz);

转载于:https://www.cnblogs.com/lx1997/p/8641755.html

静态顺序表的基本操作相关推荐

  1. 简单认识顺序表的基本操作

    文章目录 顺序表 1. 顺序表的概念 2. 顺序表的基本操作 2.1 顺序表的基本属性 2.2 增加元素操作 2.2.1 头插 2.2.2 尾插 2.2.3 按位置插入元素 2.3 删除元素操作 2. ...

  2. c语言:【顺序表】静态顺序表的初始化、打印、尾插、尾删

    #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<asser ...

  3. C++:顺序表的基本操作(待完善)

    根据命令提示进行顺序表的基本操作(待完善) #include<iostream> #include<algorithm> using namespace std; #defin ...

  4. C++实现静态顺序表的增删查改以及初始化

    C++实现静态顺序表的增删查改 顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种. //SeqList.h#pragma once#include <assert.h ...

  5. c语言实现顺序表源程序,C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 线性表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. ...

  6. PTA 顺序表的基本操作

    原题有50分,这个答案有45分,欢迎指出不足 ;) 6-2 顺序表基本操作 (50 分) 实现顺序表的基本操作,如初始化.插入.删除.输出等. 注意:顺序表中可有重复元素值. 要求:写出三个基本操作函 ...

  7. 【C/C++】静态顺序表详解(附完整源码)

    本章内容 1.什么是线性表 2.什么是顺序表 3.静态顺序表结构的定义 4.静态顺序表的函数接口实现 5.静态顺序表的问题及思考 1.什么是线性表 线性表(linear list)是n个具有相同特性的 ...

  8. 【头歌】顺序表的基本操作

    第1关:顺序表的插入操作 任务描述 本关任务:编写顺序表的初始化.插入.遍历三个基本操作函数. 相关知识 顺序表的存储结构 顺序表的存储结构可以借助于高级程序设计语言中的数组来表示,一维数组的下标与元 ...

  9. 编程实现顺序表的基本操作

    void InitList(SqList &L)//建立空顺序表函数 voidListInsert(SqList &L, int i, ElemType e) //在顺序表中第i个位置 ...

最新文章

  1. 针对“永恒之蓝(WannaCry)”攻击紧急处置手册
  2. python多层数组合成一个数组后循环打印出数组内的每一项元素的方法
  3. 爱情麻辣烫:浓缩了中华美食精华与火锅的精髓
  4. HDU - 6601 Keen On Everything But Triangle(主席树)
  5. Android 第十七课 碎片的简单用法及动态添加碎片
  6. Android之数据转化崩溃问题
  7. git bash上传大文件到github
  8. Python爬虫--- 1.2 BS4库的安装与使用
  9. 使用Unity开发RPG游戏完整指南(全)
  10. mac系统升级 brew 是用不了_MAC平台10款效率工具推荐
  11. sql加上唯一索引后批量插入_MySQL批量插入遇上唯一索引避免方法
  12. jupyter 代码到 pycharm 的迁移
  13. 解决Eclipse 鼠标悬停提示框是黑色的
  14. 【Git/Github学习笔记】Git常用命令(代码冲突)
  15. 违反计算机信息网络国际联网安全,网络安全合规指引题库:计算机信息网络国际联网,是指中华人民共和国境内的计算机信息网络为实现信息的国际交流,同外国的计算机信息网络相联接。()...
  16. 阿里天池--宫颈癌检测(基于fastRCNN)新手初次尝试
  17. python launcher卸载不了_python2的卸载
  18. 计算机专业老师教案,技能大赛-2015年全国中等职业学校计算机应用基础及计算机类专业课程“创新杯”教师信息化教学设计和说课比赛总结...
  19. 扩展欧几里得算法 求解 丢番图方程
  20. 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦(转)

热门文章

  1. 我的世界光影mod怎么用_玩转光影!闪光灯、反光板怎么用才高级?
  2. python sftp_python中实现sftp
  3. scratch少儿编程第一季——07、人要衣装佛靠金装——外观模块
  4. idea中lombok的使用
  5. 微信小程序视频弹幕效果
  6. js打开、关闭页面和运行代码那些事
  7. [转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法
  8. One2One主键关联的实现
  9. 初中计算机课教什么时候,初中计算机教学课程教学方法探讨
  10. 14-Flutter移动电商实战-ADBanner组件的编写