顺序表操作:

(代码就不一次分析了)

以下为seqlist.h头文件

#ifndef __SEQLIST_H__
#define __SEQLIST_H__#define FALSE -1
#define TRUE 0#define INIT_SIZE 100
#define RISE 20typedef int seqdata;typedef struct _seqlist
{seqdata *list;seqdata len;seqdata max_len;
}seqlist;seqlist *Create_list();//创建表int Againmalloc(seqlist *s);//大小不够的扩大int Insert_pos(seqlist *s, int pos, seqdata data);//在pos位置插入数据int Finddata(seqlist *s, seqdata data, seqdata *x);//找指定的值,返回下标int Getdata(seqlist *s, int pos2, seqdata *x);//找下标的值int Delete_pos (seqlist *s, int pos);//根据下标删除数据int Delete_data(seqlist *s, seqdata data);//根据数据删除int Reverse_list(seqlist *s);//逆序seqlist *Merge_list(seqlist *s1, seqlist *s2);//合并表格void Display (seqlist *s);//打印void Destroy(seqlist *s);//释放#endif

以下为seqlist.c函数

#include <stdio.h>
#include "seqlist.h"
#include <stdlib.h>seqlist *Create_list()
{seqlist *s = (seqlist *)malloc(sizeof (seqlist) / sizeof (char));if (s == NULL){return NULL;}s ->list = (seqdata *)malloc(sizeof (seqdata)/sizeof(char) * INIT_SIZE);if (s ->list == NULL){free(s);return NULL;}s ->len     = 0;s ->max_len = INIT_SIZE;return s;
}int Againmalloc(seqlist *s)
{if (s == NULL)return FALSE;int size     = sizeof (seqdata) /sizeof (char) * (INIT_SIZE + RISE);seqdata* tmp = (seqdata *)realloc(s ->list,size);if (tmp == NULL)return FALSE;s ->list      = tmp;s ->max_len += RISE;return TRUE;
}int Insert_pos(seqlist *s, int pos, seqdata data)
{if (s == NULL || pos < 0 || pos > s ->len)return FALSE;if (s ->len == s ->max_len){if (Againmalloc (s) != TRUE)return FALSE;           }int i;for (i = s ->len - 1; i >= pos; i--){s ->list[i+1] = s ->list[i];}s ->list[pos] = data;s ->len++;return TRUE;       }int Finddata(seqlist *s, seqdata data, seqdata *x)
{if (s == NULL || x == NULL)return FALSE;int i;int flag = 0;for (i = 0; i < s ->len; i++){if (s ->list[i] == data){printf ("找到的下标为:");flag = 1;*x   = i - 1;break;}}if (flag == 0) printf ("未找到\n");}int Getdata(seqlist *s, int pos2, seqdata *x)
{if (s == NULL  || x ==NULL ){  return FALSE;}if (pos2 < 0 || pos2 > s ->len){printf ("输入错误\n");}printf ("数字为 :");*x = s ->list[pos2];return TRUE;}int Delete_pos (seqlist *s, int pos)
{if (s == NULL || pos < 0 || pos > s ->len)return FALSE;int i;for (i = pos + 1; i < s ->len - 1; i++)s ->list[i] = s ->list[i+1];return TRUE;}int Delete_data(seqlist *s, seqdata data)
{if (s == NULL)return FALSE;int i;int j;int flag = 1;for (i = 0; i < s ->len;i++){if (s ->list[i] == data){for (j = i; j < s ->len -1; j++){s ->list[j] = s ->list[j+1];flag = 0;}               }}          if (flag == 1)printf ("没有这个数据\n");return TRUE;
}int Reverse_list(seqlist *s)
{if (s == NULL)return FALSE;int i = 0;int j = s ->len - 1;while (i < j){int tmp = s ->list[i];s ->list[i++] = s ->list[j];s ->list[j--] = tmp;}return TRUE;}seqlist *Merge_list(seqlist *s1, seqlist *s2)
{if (s1 == NULL || s2 == NULL)return NULL;seqlist* s3= (seqlist *)malloc(sizeof (seqlist) / sizeof (char));if (s3 == NULL)return NULL;int sizes3 = sizeof (seqdata) / sizeof (char) * (s1 ->len + s2 ->len);s3 ->list = (seqdata *)malloc(sizes3);s3 ->len  = s1 ->len + s2 ->len;s3 ->max_len = s1 ->len + s2 ->len;int i = 0;int j = 0;int k = 0;while (i < s1 ->len  && j < s2 ->len){if (s1 ->list[i] < s2 ->list[j])s3 ->list[k++] = s1 ->list[i++];else s3 ->list[k++] = s2 ->list[j++];}while (i < s1 ->len ){s3 ->list[k++] = s1 ->list[i++];}while (j < s2 ->len ){s3 ->list[k++] = s2 ->list[j++];}return s3;}void Display (seqlist *s)
{if (s == NULL)return ;int i;for (i = 0; i < 21; i++){if (i % 4 == 0 && i != 0)printf ("\n");printf ("%-8d",s ->list[i]);}printf ("\n");}void Destroy(seqlist *s)
{if (s == NULL)return;// 先释放存储空间free (s->list);// 释放顺序表free (s);
}

下面为main.c

#include <stdio.h>
#include "seqlist.h"int main()
{seqlist *s = Create_list();if (s == NULL){printf ("创建失败\n");return FALSE;}printf ("创建成功\n");int i1;for (i1 = 1; i1 < 21; i1++){Insert_pos(s, 0, i1);}Display (s);int k1;Finddata (s, 5, &k1);printf ("%d\n",k1);Display (s);int k2;Getdata (s, 5, &k2);printf ("%d\n",k2);Display (s);Delete_data(s,75);Display (s);Delete_pos(s,5);printf("删除后的数据为:\n");Display (s);Reverse_list(s);printf ("逆序后的数据为:\n");Display (s);seqlist *s1 = Create_list();if (s1 == NULL){printf ("创建失败\n");return FALSE;}seqlist *s2 = Create_list();int i;if (s2 == NULL){printf ("创建失败\n");return FALSE;}for (i = 20; i >= 0; i -= 2){Insert_pos(s1,0, i);}for (i = 19; i >= 1; i -= 2){Insert_pos(s2,0, i);}seqlist *s3 = Merge_list(s1, s2);printf("合并数据过程如下:\n");printf ("s1: \n");Display(s1);printf ("s2: \n");Display(s2);printf ("s3: \n");Display(s3);Destroy(s);s = NULL;printf ("销毁成功\n");   return TRUE;}

通过以上代码,总结出以下几点注意:

(1)头文件,程序代码=与==的区别,逗号分好的使用,这些虽然都是一些很细节的地方,但是对于精密的计算机来说,程序是按照我们所写的儿执行的,有时候一个符号,可能导致整个程序的崩溃。所以加强代码 编写是必不可少的,对于写程序的过程中,也应时刻注意符号等等的书写。

(2)在堆上用malloc开辟空间的时候,必不可少的操作是检查空间是否开辟成功,医用要用if语句进行检查,对于使用完的空间应该用free函数进行释放,使用完的指针指向NULL,
(3)顺序表可以类比成一个数组,下标从0开始,对于数组的大部分操作对于顺序表也适用。

(4)程序错误

合并两个有序的表,这个错误错在当时Display函数的初始值为1.。。。。找了很长时间才找到。所以写代码一定要细心。

(5)对于程序中的bug,现阶段要自己找,自己看,这些都是自己写代码宝贵的财富,只有错过,才知道哪儿是对的。只要改了这些习惯,才能写出高质量的代码。

(6)模型,很多不懂得过程用笔画成模型,用模型参照解答,会很快。

DC - 13 :顺序表相关推荐

  1. 【顺序表】13 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    问题描述 : 目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计. 应用1:试设计一个算法,用尽可能少的辅助空间将非空顺序表中前 m 个元素和后 ...

  2. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  3. ¥1-3 SWUST oj 942: 逆置顺序表

    逆置顺序表 题目描述 源代码 题目描述 源代码 #include<iostream> #include<stdlib.h> #include<malloc.h> u ...

  4. 数据结构之【线性表】(顺序表、链表的基本操作实现)

    概念 线性表:是N个数据元素的有限序列. 顺序表:用一组地址连续的存储单元依次存储[线性表 ]的数据元素.(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储[线性 ...

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

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

  6. C++实现动态顺序表

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的存 ...

  7. 使用JAVA数组实现顺序表

    1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象. 2,默认构造方法创建了一个默认大小为16的Object数组:带参数的构造方法创建一个指定长度的O ...

  8. python与js通用的数据结构_五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)...

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList { //1. initList(&L):初始化表.构造一个空的线性表.放回值应该是 ...

  9. 顺序表的结构和9个基本运算算法

    书中的代码: 1 #include <iostream> 2 using namespace std; 3 4 #define MaxSize 50 5 typedef int ElemT ...

最新文章

  1. 益老而弥坚:软件开发哲学反思录
  2. 修改nw.js的exe文件使其请求管理员权限
  3. 用博奥如何导入单项工程电子表_用博奥如何导入单项工程电子表_博奥常见问题处理汇总...
  4. SQLite中的SQL
  5. 【NLP】Doc2vec原理解析及代码实践
  6. html+form+multipartform-data,表单 – 如何处理node.js中的multipart / form-data
  7. 升级jquery-easyui1.4.5后treegrid无法显示
  8. C#锐利体验-第八讲 索引器与操作符重载(转)
  9. Spring : Spring配置文件加载位置
  10. php速度为什么快,为什么 === 的速度比 == 快?
  11. 为什么vi用HJKL和ESC
  12. 10月| R社区原创作者免费赠书
  13. ae效果英文版翻译对照表_AE CS6 最全特效中英翻译
  14. Qt优秀开源项目之十四:SortFilterProxyModel
  15. TCP/IP协议头部结构
  16. idea怎样创建jsp文件
  17. 学习线程安全队列ConcurrentQueue
  18. mysql中where子句不区分大小写
  19. user account control用户帐户控制
  20. linux hdmi输出快捷键,Linux 下的投影仪 HDMI 输出设置

热门文章

  1. 金山云郝明非:一年上线整套流媒体处理服务
  2. 悬赏任务h5系统源码接单发单平台支持游戏试玩签到
  3. 200PLC 一次FOR循环获取最大值、最小值
  4. Ping过程的完全解析
  5. Firefox plugin
  6. texstudio 使用方法_Texstudio使用技巧——基于个人
  7. 连续系统分析【信号与系统四】
  8. vue基于canvas 涂鸦和文字编辑
  9. zigbee入网过程深入解析(Ubiqua抓包)
  10. 分分钟教你如何在win10中运行第一个C语言程序