#ifndef SQLIST_H__
#define SQLIST_H__#define DATASIZE 1024typedef int datatype;typedef struct node_st//创建结构体_别名为sqlist,里面包含两个成员。
{datatype data[DATASIZE];//创建了一个整型数组int last;//数组中最后一个元素}sqlist;sqlist *sqlist_create();//创建顺序表void sqlist_create1(sqlist **);//创建顺序表1int sqlist_insert(sqlist *, int i, datatype * );//往创建好的顺序表中第i个位置插入元素int sqlist_delete(sqlist *, int i);//删除第i个元素int sqlist_find(sqlist *,datatype *);//查找某个元素并返回其位置int sqlist_isempty(sqlist *);//查询当前顺序表是否为空int sqlist_setempty(sqlist *);//把当前顺序表置为空int sqlist_getnum(sqlist *);//看当前顺序表是多长void sqlist_display(sqlist *);//把当前顺序表当中的内容遍历出来int sqlist_destory(sqlist *);//销毁当前顺序表int sqlist_union(sqlist *,sqlist *);//合并两个顺序表#endif#include <stdio.h>
#include <stdlib.h>
#include "sqlist.h"sqlist *sqlist_create()//用指针函数,创建顺序表,可以直接返回该表,进行后续增删改查
{sqlist *me;//创建一个顺序表meme = malloc(sizeof(*me));//动态申请一块儿连续的内存空间,让me指针指向这块儿内存if(me == NULL)return NULL;//如果me指向空,说明动态申请失败了,返回空me->last = -1;//把表置为空表,表中最后一个元素的下表为-1return me;//把所创建的表返回}void sqlist_create1(sqlist **ptr)//方法二:用普通函数创建表,需要用到二级指针,原因是一级指针要用来指向该申请到的内存空间,并随后为进行增删改查做出改变
{*ptr = malloc(sizeof(**ptr));if(*ptr == NULL)return ;(*ptr)->last = -1;return ;}int sqlist_insert(sqlist *me, int i, datatype *data )//在第i个位置插入数据元素*data
{int j;if(me->last == (DATASIZE-1))//判断当前顺序表是否已满return -1;if(i < 0 || i > (me->last+1))//判断输入的i是否合法return -2;for(j = me->last; i<= j; j--)//从后往前直到所插位置ime->data[j+1] = me->data[j];//把i往后的元素依次后移me->data[i] = *data;//把要插入的元素放入第i个位置me->last++;//插入一个元素顺序表就加长1return 0;//插入完成返回0}int sqlist_delete(sqlist *me, int i)//删除顺序表中第i个位置的元素
{int j;if(i < 0 || i > me->last)//判断i是否合法return -1;for(j = i+1; j <= me->last; j++)//从第i+1到表中最后一个元素me -> data[j-1] = me->data[j];me->last--;//删除一个顺序表缩短1return 0;//删除成功返回0}int sqlist_find(sqlist *me,datatype *data)//查找顺序表中data元素
{if(sqlist_isempty(me) == 0)//判断顺序表是否为空return -1;//为空返回-1for(int i = 0; i <= me->last; i++)//从顺序表的第0个元素到最后一个元素if(me->data[i] == *data)//判断第i个元素是否是所查询的元素return i;//如果是则返回其位置return -1;//不是的话返回-1
}int sqlist_isempty(sqlist *me)//判断顺序表是否为空
{if(me->last == -1)//判断表中的最后一个位置是否是-1return 0;//是的话就说明就是空表,返回0return-1;//不是的话就返回-1
}int sqlist_setempty(sqlist *me)//把一个顺序表设置为空
{me->last = -1;//直接把顺序表中的最后一个元素的位置设置为-1return 0;//成功返回0}int sqlist_getnum(sqlist *me)//得到表长度
{return (me->last+1);//直接返回表的最后一个元素的位置加上1}
void sqlist_display(sqlist *me )//遍历该顺序表
{if(me->last == -1)//如果该表的最后一个元素为-1;即表空return ;//返回空。for(int i = 0; i <= me->last ; i++)//从第0个位置到最后一个位置printf("%d ",me->data[i]);//一次打印表中的元素printf("\n");//打印换行return ;//返回空}int sqlist_destory(sqlist *me)//销毁顺序表
{free(me);//释放表的内存空间return 0;//销毁成功返回0}int sqlist_union(sqlist *list1,sqlist *list2)//合并两个顺序表,把表2合并到表1,并不准出现相同元素
{int i = 0;//for(i = 0; i <= list2->last; i++)//表2中从第0个元素到最后一个元素{if(sqlist_find(list1,&list2->data[i]) < 0)//调用find函数来判断表1中是否有表2中的元素,没有的话就执行下一步sqlist_insert(list1,i,&list2->data[i]);//把表2中的该元素插入到表1中}}#include <stdio.h>
#include <stdlib.h>
#include "sqlist.h"int main()
{sqlist *list;sqlist *list1;datatype arr[] = {12,23,34,45,56};datatype arr1[] = {23,5,1,57,54,89};int i,j,err;//  list = sqlist_creat();sqlist_create1(&list);sqlist_create1(&list1);if(list == NULL){fprintf(stderr,"sqlist_creat() failed!\n");//报错语句exit(1);}if(list1 == NULL){fprintf(stderr,"sqlist_creat() failed!\n");exit(1);}for(i = 0; i<sizeof(arr)/sizeof(*arr);i++)if((err = sqlist_insert(list,0,&arr[i])) != 0){if(err == -1)fprintf(stderr,"The arr is full.\n");else if(err == -2)fprintf(stderr,"the pos you want to insert is wrong.\n");elsefprintf(stderr,"Error!\n");exit(1);}for(j = 0; j < sizeof(arr1)/sizeof(*arr1); j++){if((err = sqlist_insert(list1,0,&arr1[j])) != 0){if(err == -1)fprintf(stderr,"The arr is full.\n");else if(err == -2)fprintf(stderr,"the pos you want to insert is wrong.\n");elsefprintf(stderr,"Error!\n");exit(1);        }}sqlist_display(list);sqlist_display(list1);
//  sqlist_delete(list,1);//    sqlist_display(list);sqlist_union(list,list1);sqlist_display(list);sqlist_destory(list);sqlist_destory(list1);exit(0);}all:mainmain: main.o sqlist.o$(CC) $^ -o $@clean:rm *.o main -rf

李慧芹数据结构代码(顺序表)相关推荐

  1. 数据结构之顺序表的删除、查找、遍历

    一.引言 本篇文章作为顺序表新的篇章延续上一篇文章(数据结构之顺序表构造.插入.扩容操作)的内容. 二.顺序表的删除.查找.遍历操作 注:代码实现均为C语言 1.顺序表的删除(erase)操作 当我们 ...

  2. 数据结构_顺序表SeqList(C++

    数据结构_SeqList顺序表(C++实现 文章目录 数据结构_SeqList顺序表(C++实现 前言&注意事项 顺序表实现方法 总结 结束 前言&注意事项 有些函数没有修改成员数据的 ...

  3. Tsai笔记:C++学习随性笔记(2)—— 数据结构:顺序表的基本操作

    Tsai笔记:C++学习随性笔记(2)-- 数据结构:顺序表的基本操作 Tsai三步.(第一步,功能说明.第二步,结果图显示.第三步,代码展示) 第一步,功能说明. 1.线性表的顺序存储 线性表的顺序 ...

  4. 能带你起飞的【数据结构】成王第一篇:数据结构的顺序表

    目录 前言 一.什么是顺序表 1.顺序表的概念及结构 创建顺序表 打印顺序表 获取顺序表长度 在pos位置新增元素 判定是否包含某个元素 查找某个元素对应的位置 获取 pos 位置的元素 给 pos ...

  5. 数据结构25 ————顺序表查找

    数据结构25 ----顺序表查找 一. 目录 文章目录 数据结构25 ----顺序表查找 一. 目录 二. 顺序表查找 三. 顺序表查找代码 1.基本算法 2.进行优化 四. 参考资料 二. 顺序表查 ...

  6. 【数据结构】顺序表的应用(4)(C语言)

    [数据结构]顺序表的应用(1)(C语言) [数据结构]顺序表的应用(2)(C语言) [数据结构]顺序表的应用(3)(C语言) 设计一个算法,将一个顺序表倒置,即如果顺序表各个节点值存储在一维数组a中, ...

  7. 【数据结构】顺序表的应用(3)(C语言)

    问题: 已知一个顺序表中的各节点值是从大到小有序的,设计一个算法,插入一个值为x的节点,使顺序表中的节点仍然是从小到大有序的. 头文件与该头文件一样:[数据结构]顺序表的实现(C语言) #includ ...

  8. 【数据结构】顺序表的应用(2)(C语言)

    问题: 2.有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列. 头文件与该头文件一样:[数据结构]顺序表的实现(C语言) #in ...

  9. 【数据结构】顺序表的应用(1)(C语言)

    问题: 1.将顺序表(a1,a2,-,an)重新排列以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型). 头文件与该头文件一样:[数据 ...

最新文章

  1. LINUX UMASK详解
  2. BZOJ 2303 方格染色(带权并查集)
  3. js---BOW---页面打开方式,跳转方式 2017-03-24
  4. 【CodeForces - 920E】Connected Components? (dsu,补图连通块,STLset+map,bfs 或bitset)
  5. mysql返回行数_如何计算MySQL查询返回的行数?
  6. 三种方法绘制雷达图,用最快的时间做出最好看的可视化图表
  7. 服务器装win7系统流程图,Win7安装详细图文教程
  8. Excel 散点图和折线图的区别
  9. JS 利用CNZZ进行站长统计
  10. 推荐 10 款 C++ 在线编译器
  11. [JPBC] BigInteger 和 Element 的转换
  12. 交换式局域网_SWITCH交换模式
  13. 生活娱乐 重庆乡村基挑战肯德基为何失败
  14. mysql 与sqlserver对比?哪个更好用?
  15. STC15单片机 线性按键控制LED流水灯位移
  16. macOS Big Sur 11.1 Beta1(20C5048i)原版镜像下载
  17. 黑色笼罩中国联通:半年流失近千万用户 4G发展停滞不前---OFweek
  18. seo专用推送神器免费使用
  19. cv个人计算机SCI英文简历模板,CV 英文简历模板可打印.doc
  20. tm4c123g c语言,TI 推出 Tiva C 系列 TM4C123G USB+CAN 开发套件

热门文章

  1. 基于 arduino 的两轮自行车
  2. LaTeX--1--了解LaTeX
  3. 2016年中国前1000名公众号最新报价
  4. Linux性能监控命令_nmon 安装与使用
  5. 奶爸日记-沉迷看小猪
  6. Form表单之get提交与post提交
  7. SpringBoot控制配置类加载顺序
  8. vue3父传子,子传父
  9. keras 入门教程(一)
  10. 线程池的核心线程会销毁吗?