上次已经写了静态的顺序表,今天在补充一个动态的顺序表。大体思路还是一样的。请看代码。这次我就不详细解释了。

#include”pSeqList.h”

#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef int DataType;
#define  INIT_UNM  3typedef struct SeqList
{DataType* date;  //数据DataType sz; //大小int capacity; //容量
}SeqList, *pSeqList;void initSeqList(pSeqList*  pseq);
void PushBack(pSeqList  pseq, DataType d); //尾插法
void PopBack(pSeqList pseq);  //尾删
void FrontBack(pSeqList pseq, DataType d); //头插
void PopFront(pSeqList pseq);  //头删
void PrintfSeqList(pSeqList  pseq);  //打印显示
int  Find(pSeqList pseq, DataType d);  //查找d元素,返回位置
void Insert(pSeqList pseq, int pos, DataType d);  //任意位置插入
void Erase(pSeqList pseq, int pos);  //任意位置删除
void Remove(pSeqList pseq, DataType d);  //移除第一个元素d
void TestRemoveAll(pSeqList pseq, DataType d); //移除所有元素d
int Size(pSeqList pseq);  //元素个数
int Empty(pSeqList pseq); //清空
void BubbleSort(pSeqList pseq); //冒泡排序
int BinarySearch(pSeqList pseq, DataType d); //二分查找
int BinarySearch_R(pSeqList pseq, int left, int right, DataType d); //二分查找优化
void selectsort(pSeqList pseq); //选择排序
void SelectSort_op(pSeqList pseq);//选择排序优化#endif // __SEQLIST_H__

#include”pSeqListTest.h”

#include"pSeqList.h";void Testbushback()  //尾插
{SeqList seq;initSeqList(&seq);CheckCapacity(&seq);for (int i = 1; i <= 5; i++){PushBack(&seq, i);}PrintfSeqList(&seq);PopBack(&seq);PrintfSeqList(&seq);
}void TestFrontback() //头插
{SeqList seq;initSeqList(&seq);FrontBack(&seq, 1); //头部插入FrontBack(&seq, 2);FrontBack(&seq, 3);FrontBack(&seq, 4);PrintfSeqList(&seq);PopFront(&seq);PrintfSeqList(&seq);
}void TestFind()  //查找元素
{int pos = 0;SeqList seq;initSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PrintfSeqList(&seq);pos = Find(&seq, 4);if (-1 == pos)printf("不存在\n");elseprintf("%d\n", pos);}void TestInsert()  //插入
{int pos = 0;SeqList seq;initSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);pos = Find(&seq, 3);if (pos != -1){Insert(&seq, pos, 5);}PrintfSeqList(&seq);
}void TestErase()  //删除指定位置元素
{int pos = 0;SeqList seq;initSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PrintfSeqList(&seq);pos = Find(&seq, 3);if (pos != -1){Erase(&seq, 3);}PrintfSeqList(&seq);
}void TestRemove()  //删除顺序表中指定元素的第一个
{SeqList seq;initSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PushBack(&seq, 1);PrintfSeqList(&seq);Remove(&seq, 1);PrintfSeqList(&seq);}void TestRemoveAll() //删除顺序表中所有指定元素
{SeqList seq;initSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PushBack(&seq, 1);PrintfSeqList(&seq);RemoveAll(&seq, 1);PrintfSeqList(&seq);
}void TestBubbleSort()  //冒泡排序
{SeqList seq;initSeqList(&seq);PushBack(&seq, 5);PushBack(&seq, 4);PushBack(&seq, 3);PushBack(&seq, 2);PushBack(&seq, 1);PushBack(&seq, 0);PrintfSeqList(&seq);BubbleSort(&seq);PrintfSeqList(&seq);
}void TestBinarySearch()  //二分查找
{int i = 0;int pos = 0;SeqList seq;initSeqList(&seq);for (i = 0; i < 10; i++){PushBack(&seq, i + 1);}pos = BinarySearch_R(&seq, 0, seq.sz - 1, 7);if (pos == -1){printf("找不到\n");}else{printf("找到了,下标是%d\n", pos);}
}void TestSelectSort()  //选择排序
{int i = 0;int pos = 0;SeqList seq;initSeqList(&seq);for (i = 10; i > 0; i--){PushBack(&seq, i);}PrintfSeqList(&seq);selectsort(&seq);PrintfSeqList(&seq);}void TestSelectSearch()  //选择排序优化
{int i = 0;int pos = 0;SeqList seq;initSeqList(&seq);for (i = 10; i > 0; i--){PushBack(&seq, i);}PrintfSeqList(&seq);SelectSort_op(&seq);PrintfSeqList(&seq);
}int main()
{Testbushback();printf("\n");TestFrontback();printf("\n");TestFind();printf("\n");TestInsert();printf("\n");TestErase();printf("\n");TestRemove();printf("\n");TestRemoveAll();printf("\n");TestBubbleSort();printf("\n");TestBinarySearch();printf("\n");TestSelectSort();printf("\n");TestSelectSearch();system("pause");
}

#include”pSeqList.c”

#include"pSeqList.h";void initSeqList(pSeqList pseq)  //初始化
{pseq->sz = 0;DataType* tmp = NULL;tmp = (DataType*)malloc(INIT_UNM * sizeof(pseq->date));if (tmp == NULL){perror("malloc error:");exit(EXIT_FAILURE);}pseq->date = tmp;pseq->capacity = INIT_UNM;
}void CheckCapacity(pSeqList pseq)  //增容
{if (pseq->sz == pseq->capacity){DataType* tmp = (pSeqList*)realloc(pseq->date, (pseq->capacity + INIT_UNM)*sizeof(pseq->date));if (pseq->date== NULL){perror("realloc error:");exit(EXIT_FAILURE);}pseq->date = tmp;pseq->capacity = pseq->capacity + INIT_UNM;}
}void PushBack(pSeqList  pSeq, DataType d) //尾插
{assert(pSeq);CheckCapacity(pSeq);pSeq->date[pSeq->sz] = d;pSeq->sz++;
}void FrontBack(pSeqList pSeq, DataType d)  //头插
{assert(pSeq);CheckCapacity(pSeq);for (int i = pSeq->sz - 1; i >= 0; i--){pSeq->date[i + 1] = pSeq->date[i];}pSeq->date[0] = d;pSeq->sz++;
}void PopFront(pSeqList pseq)  //头删
{assert(pseq);if (pseq->sz == 0){printf("顺序表为空,无法删除");return;}for (int i = 0; i < pseq->sz - 1; i++){pseq->date[i] = pseq->date[i + 1];}pseq->sz--;
}void PopBack(pSeqList pseq) //尾删
{assert(pseq);if (pseq->sz == 0){printf("顺序表为空,无法删除\n");return;}return pseq->sz--;
}void PrintfSeqList(pSeqList  pSeq)  //显示
{int i = 0;if (pSeq->sz == 0){printf("顺序表为空");return;}for (i = 0; i < pSeq->sz; i++){printf("%d ", pSeq->date[i]);}printf("\n");
}int Find(pSeqList pseq, DataType d)  //查找
{int i = 0;assert(pseq);for (i = 0; i < pseq->sz; i++){if (pseq->date[i] == d){return i;}}return -1; //不能返回0
}void Insert(pSeqList pseq, int pos, DataType d)  //指定位置插入指定元素
{int i = 0;assert(pseq != NULL && pos >= 0 && pos<pseq->sz);for (i = pseq->sz - 1; i >= pos; i--){pseq->date[i + 1] = pseq->date[i];}pseq->date[pos] = d;pseq->sz++;
}void Erase(pSeqList pseq, int pos)  //删除指定位置元素
{int i = 0;assert(pseq != NULL && pos >= 0 && pos < pseq->sz);if (pseq->sz == 0){printf("顺序表为空,无法删除");return;}for (i = pos; i < pseq->sz - 1; i++){pseq->date[i] = pseq->date[i + 1];}pseq->sz--;
}void Remove(pSeqList pseq, DataType d)  //删除顺序表中指定元素的第一个
{
#if 0int i = 0;assert(pseq);for (i = 0; i < pseq->sz; i++){if (pseq->date[i] == d){break;}}if (i == pseq->sz){printf("要删除的元素不存在\n");return;}for (; i < pseq->sz - 1; i++){pseq->date[i] = pseq->date[i + 1];}pseq->sz--;
#endifint i = 0;int pos = 0;assert(pseq);pos = Find(pseq, d);if (pos != -1){Erase(pseq, pos);}
}void RemoveAll(pSeqList pseq, DataType d)  //删除顺序表中所有指定元素
{
#if 0int i = 0;assert(pseq);for (i = 0; i < pseq->sz; i++){if (pseq->date[i] == d){int j = 0;for (j = i; j < pseq->sz - 1; j++){pseq->date[j] = pseq->date[j + 1];}pseq->sz--;i--;}}
#endif
#if 0int count = 0;int i = 0;DataType *tmp = NULL;assert(pseq);tmp = malloc(pseq->sz*sizeof(DataType));if (tmp == NULL){perror(" use malloc");return;}for (i = 0; i < pseq->sz; i++){if (pseq->date[i] != d){tmp[count++] = pseq->date[i];}}memcpy(pseq->date, tmp, count*sizeof(DataType));pseq->sz = count;free(tmp);tmp = NULL;
#endifassert(pseq);int i = 0;int count = 0;for (i = 0; i < pseq->sz; i++){if (pseq->date[i] != d){pseq->date[count++] = pseq->date[i];}}pseq->sz = count;
}int Size(pSeqList pseq)  //大小
{return pseq->sz;
}int Empty(pSeqList pseq)  //清空
{return pseq->sz == 0;
}void Sawp(DataType* px, DataType*py)  //交换
{DataType tmp = *px;*px = *py;*py = tmp;
}void BubbleSort(pSeqList pseq) //冒泡排序
{int i = 0;int j = 0;int flag = 0;assert(pseq);for (i = 0; i < pseq->sz - 1; i++){flag = 0;for (j = 0; j < pseq->sz - 1 - i; j++){if (pseq->date[j] > pseq->date[j + 1]){Sawp(pseq->date + j, pseq->date + j + 1);flag = 1;}}if (flag == 0)return;}
}int BinarySearch(pSeqList pseq, DataType d)  //二分查找
{int left = 0;int right = pseq->sz - 1;assert(pseq);while (left <= right){int mid = left + (right - left) / 2;if (pseq->date[mid] > d){right = mid - 1;}else if (pseq->date[mid] < d){left = mid + 1;}else{return mid;}}return -1;
}int BinarySearch_R(pSeqList pseq, int left, int right, DataType d) //二分查找优化
{int mid = 0;if (left > right)return -1;mid = left + (right - left) / 2;if (pseq->date[mid] < d){return BinarySearch_R(pseq, mid + 1, right, d);}else if (pseq->date[mid]>d){return BinarySearch_R(pseq, left, mid - 1, d);}else{return mid;}
}void selectsort(pSeqList pseq) //选择排序
{assert(pseq);int i = 0;int j = 0;for (i = 0; i < pseq->sz - 1; i++){int MaxPos = 0;for (j = 0; j<pseq->sz - i; j++){if (pseq->date[j]>pseq->date[MaxPos]){MaxPos = j;}}if (MaxPos != pseq->sz - 1 - i){int tmp = pseq->date[MaxPos];pseq->date[MaxPos] = pseq->date[pseq->sz - 1 - i];pseq->date[pseq->sz - 1 - i] = tmp;}}
}void SelectSort_op(pSeqList pseq)  //选择排序优化
{int i = 0;int start = 0;int end = pseq->sz - 1;while (start < end){int MaxPos = start;int MinPos = end;for (i = 1; i < end; i++){if (pseq->date[i]>pseq->date[MaxPos]){MaxPos = i;}if (pseq->date[i] < pseq->date[MinPos]){MinPos = i;}}if (MinPos != start){Sawp(pseq->date + MinPos, pseq->date + start);}if (MaxPos == start){MaxPos = MinPos;}if (MaxPos != end){Sawp(pseq->date + MaxPos, pseq->date + end);}start++;end--;}}

如有错误,还请指出。

动态的顺序表(C语言实现)相关推荐

  1. c语言线性顺序表,C语言程序——线性顺序表.doc

    C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  2. 删除所有奇数顺序表c语言,怎么将一个线性表(顺序表)拆分成两个奇偶表(C语言)?...

    如何将线性表A拆分成线性表A和B,使得A存放奇数,B存放偶数? 1.基础函数 1.1 get取函数 int get(nod *la,int i) { return la->data[i]; } ...

  3. 图书信息管理系统(数据结构顺序表,c语言版)

    图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...

  4. 线性表之顺序表(C语言实现)

    线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一 ...

  5. 数据结构-顺序表-c++语言-模板类实现代码(附详细解释) _清风明月

    #include<iostream> #include<new> #define MAXSIZE 1000 #define REALLOC 10 using namespace ...

  6. 删除所有奇数顺序表c语言,如何删除列表中的所有奇数序数项?

    您的代码失败了,因为您试图修改正在迭代的列表,而不考虑副作用.你知道吗x = ['apple','fruit','orange','fruit','lemon','fruit'] for i in r ...

  7. 顺序表--C语言版(从0开始,超详细解析 ,小白一听就懂!!!)

    目录 一.前言

  8. 顺序表的c语言结构体描述,顺序表的基本方法实现C语言版

    顺序表--------------线性表的第一个儿子 这个儿子的结构体定义: typedef int ElemType;//取别名 typedef struct link{ ElemType * he ...

  9. 【数据结构】顺序表的增删查改 (C语言实现)

    文章目录 一.线性表 二.顺序表 1.什么是顺序表 2.顺序表的分类 三.动态顺序表的实现 1.结构的定义 2.顺序表的初始化 3.检查容量 4.在头部插入数据 5.在尾部插入数据 6.在指定位置插入 ...

  10. 数据结构的起航,用C语言实现一个简约却不简单的顺序表!(零基础也能看懂)

    目录 0.前言 1.线性表 2.顺序表 2.1什么是顺序表 2.2 顺序表结构体设计 2.3 顺序表的初始化 2.4 顺序表的销毁 2.5* 顺序表的尾插 2.6* 顺序表的尾删 2.7 顺序表的头插 ...

最新文章

  1. 互联网巨头终极战场:得开发者得天下
  2. 获取iframe中的contentWindow
  3. 两经纬度之间的距离计算
  4. aop springboot 传入参数_Spring、SpringMVC和SpringBoot看这一篇就够了!
  5. 粉丝提问:求问大神您会查exif吗?
  6. mongodb报错 An error occurred while loading navigation: topology was destroyed
  7. 信息学奥赛一本通(1320:【例6.2】均分纸牌(Noip2002))
  8. UIDeviceOrientation 和 UIInterfaceOrientation 设备旋转的用法 (实例)
  9. 用户登陆注册功能(PHP)
  10. append从一个添加到另一_小米的另一妙用,制作小米锅巴,吃着嘎嘣脆,一口一个香得很...
  11. 中关村海龙大厦-买本上当经历给大家提个醒
  12. Python数据分析(二): Numpy技巧 (3/4)
  13. 怎么装办公系统服务器,怎么安装oa系统教程
  14. 服务器:RAID、AHCI、IDE
  15. 推荐几款好用的去视频水印软件,快来看看吧
  16. 怎么用diskgenius扩大c盘,超简单。
  17. gomonkey permission denied
  18. 【游戏逆向】CS1.6无后坐力基址寻找
  19. 身份证OCR识别接口的优点
  20. HashMap(2)-----哈希表

热门文章

  1. java多线程条件变量_30秒带你读懂Java并发包工具(JUC)之Condition(并发条件变量)...
  2. 校验json格式_接口的登录状态校验以及JWT
  3. python统计频数_python统计单词出现次数
  4. Vue:解决实现留言回复功能时,点击回复某一条所有回复面板都弹出
  5. Javascript:基础语法
  6. 解决npm安装时出现run `npm audit fix` to fix them, or `npm audit` for details
  7. Unity学习笔记(二)——Unity ML-agents安装与配置(1.9.1)
  8. CVPR 2022 Oral | 目标检测新工作!南大开源AdaMixer:快速收敛的基于查询的目标检测器...
  9. 三维点云配准方法(两帧)
  10. 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为...