c语言中线性表,用c语言实现线性表的基本操作

  c语言中线性表,用c语言实现线性表的基本操作

  #包含stdio.h

  #包含stdlib.h

  #define KSIZE 10//Define常数:线性表的长度。

  #定义假0

  #定义正确1

  /************************************************************************/

  /*线性列表(linear list)

  线性表是一种灵活的数据结构,其长度可以根据需要增加或缩短,即线性表的数据元素不仅可以被访问,还可以被插入和删除。

  抽象线性表如下:

  ADT:抽象数据类型抽象数据类型

  ADT列表

  L:L:LIST的简称,也就是线性表本身

  I:索引

  e:element的简称,即元素

  Cur _: short cur_:current,即当前元素。

  Pre_:previous,即前一个元素

  Next_:下一个,即下一个元素

  访问:访问元素的方式。

  List (l) l你可以把它想象成一个容器(数组):初始化线性表。

  DestroyList( L) L你可以把它想象成一个容器(数组):销毁线性表。

  ClearList( L) L你可以把它想象成一个容器(数组):清空线性表。

  ListEmpty(L) L你可以把它想象成一个容器(数组):线性表是空的吗?

  Length (l) l你可以把它想象成一个容器(数组):线性表中元素的个数。

  GetElem(L,I,e)L你可以把它看成一个容器(数组)。I代表指数。e得到的元素是什么?获取线性表中指定的元素。

  LocateElem(L,E,compare())L你可以把它想象成一个容器(数组),E代表从数组中寻找这个E元素:给定的元素得到它第一次出现的索引位置。

  Prielem (L,cur_e,pre_ e)表示获取L表示数组cur _ e表示指定元素,pre _ e表示指定元素的前一个元素:给定元素获取其前一个元素。

  NextElem(L,cur_ e,next_ e)表示获取L表示数组cur_e表示指定元素,next_ e表示指定元素的下一个元素:给定元素获取下一个元素。

  ListInsert( L,I,e) L你可以把它看成一个容器(数组)I在指定位置E插入的元素是什么?将元素插入链表中的指定位置。

  ListDelete( L,I,e) L你可以把它想象成一个容器(数组)。我指定元素e,删除的元素是什么?从链表中的指定位置删除元素。

  ListTraverse(L,visit())遍历数组:遍历元素。

  简单的线性表-C语言实现

  线性表的组成类型:int array */

  /************************************************************************/

  /* -

  初始列表(

  销毁列表(

  清除列表(

  list empty(L);

  列表长度(L);

  GetElem(L,I,

  LocateElem(L,e,compare());

  ListInsert( L,I,e);

  ListDelete( L,I,

  ListTraverse(L,visit());

  PriorElem(L,cur_ e,pre _ e);

  NextElem(L,cur_ e,next _ e);

  - */

  int计数;

  void InitList(int * list);//InitList( L)代表*

  void DestroyList(int * list);

  void clear list(int * list);

  int list empty(int * list);

  int list length(int * list);

  int GetElem(int *list,int i,int * e);

  int LocateElem(int *list,int e);

  int ListInsert(int *list,int i,int e);

  int ListDelete(int *list,int i,int * e);

  void list traverse(int * list);

  int main(void)

  {

  int arr[KSIZE];

  int e=0;

  InitList(arr);

  ListInsert(arr,0,5);

  ListInsert(arr,0,8);

  ListInsert(arr,1,7);

  list traverse(arr);

  ListDelete(arr,0,NULL);

  list traverse(arr);

  GetElem(arr,1,e);

  printf(e=%d\n ,e);

  printf( 5的索引是% d \ n ,locatelem (arr,5));

  清除列表(arr);

  if(ListEmpty(arr))

  {

  Printf(线性表为空\ n );

  }

  其他

  {

  Printf(线性表不为空\ n );

  }

  Printf(线性表长度为%d\n ,list length(arr));

  DestroyList(arr);

  系统(“暂停”);

  返回0;

  }

  Void InitList(int *list)//L你可以把它看成一个容器(数组):初始化线性表

  {

  int I=0;

  count=0;

  for(I=0;我KSIZEI )//遍历线性表,赋值0,相当于初始化。

  {

  list[I]=0;

  }

  }

  void DestroyList(int *list)

  {}

  Void ClearList(int *list)//L你可以把它想象成一个容器(数组):清空线性表。

  {

  int I=0;

  count=0;

  for(I=0;我KSIZE我)

  {

  list[I]=0;//和初始化一样,相当于清空线性表。

  }

  }

  Int empty (int * list)//l你可以把它想象成一个容器(数组):线性表是空的吗?

  {

  If(count==0)//判断线性表是否为空。如果==0表示空,则为真。意思是有,而且是空的!

  {

  返回TRUE

  }

  其他

  {

  返回FALSE

  }

  }

  int length(int * list)//返回线性表的长度(看到这里你就明白了)# define k size 10 int arr[k size]list length(arr)

  {

  返回计数;

  }

  Getelem (int * list,int I,int * e)//L你可以把它想象成一个容器(数组)。I代表索引e代表获得的元素。这是什么?获取线性表中指定的元素。

  {

  If(i count i=0)//索引必须大于等于0,因为索引是从零开始的。I必须小于count,因为它不能大于数组。

  {

  *e=列表[I];//获取的元素在索引1的位置,这个位置赋给了*e,也就是说*e知道要获取哪个元素。

  返回TRUE

  }

  其他

  {

  返回FALSE

  }

  }

  Intlocatelem (int * list,int e)//l你可以把它看成一个容器(数组),e的意思是找出数组中是否有这个e元素:给定的元素得到它第一次出现的索引位置。

  {

  int I=0;

  for(I=0;我数;I )//遍历线性表的数组,

  {

  If(list[i]==e)//如果数组元素等于e,则输出其索引位置。

  {

  返回I;

  }

  }

  return-1;

  }

  /************************************************************************/

  /*

  -

   0 1 2 3 4

  -

  */

  /************************************************************************/

  Int list insert (int * list,int i,int e)//L你可以把它看成一个容器(数组)I在指定位置e插入的元素是什么?将元素插入链表中的指定位置。

  {

  If(i=count i=0)//Why (i=count,因为插入位置应该是1

  {

  int k=0;

  for(k=count-1;k=I;k -)

  {

  list[k 1]=list[k];//以上都是后退一位的元素。

  }

  list[I]=e;//那么E代表list[0]

  数数;//然后count又代表满,它的计数又扩大了。

  返回TRUE

  }

  其他

  {

  返回FALSE

  }

  }

  Int delete (int * list,int I,int * e)//L你可以把它看成一个容器(数组)。我指定e删除什么元素。从链表中的指定位置删除元素。

  {

  If(我数i=0)//删除不展开空间。

  {

  int k=0;

  如果(e!=NULL)//e赋给*e,表示*e是要删除的元素。这是什么?

  {

  *e=列表[I];

  }

  for(k=I;k计数-1;K )//向前迈一步

  {

  list[k]=list[k 1];

  }

  count-;//然后count -,表示删除成功。

  返回TRUE

  }

  其他

  {

  返回FALSE

  }

  }

  void ListTraverse(int *list)

  {

  int I=0;

  for(I=0;我数;我)

  {

  printf(%d ,list[I]);//只遍历元素输出。

  }

  printf( \ n );

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: