线性表顺序表

#include <Windows.h>

#define MAXSIZE 100/*定义表的长度,这是顺序表的缺点呀,不过有失必有得*/

#define OK     1

#define ERROR  0

typedef int Status;/*定义我们函数的返回状态*/

typedef int ElemType;/*数据类型*/

 

typedef  struct 
{

 ElemType data[MAXSIZE];/*表在这里*/

 int length;/*表的长度*/

}LinkList;

 

/************************************************************************/
/*                 获取第N个元素                                        */
/************************************************************************/

Status GetElem(int N,LinkList L,ElemType  *e)
{

 /*做一件事情前,总得界定范围,不要搞不符合中国国情的事情哦。。。*/

 if (L.length<1)

  return ERROR;

 /*亲,不要跑偏了,只能在这里*/

 if (N>L.length || N<1)

  return ERROR;

 *e=L.data[N-1];

 return OK;

}
/************************************************************************/
/*                 删除第N个元素                                        */
/************************************************************************/

Status DeleteElem(int N,LinkList *L,ElemType *e)
{

 //同样的,要符合中国国情
 if (L->length<1)

  return ERROR;
 /*亲,还是不要跑偏了,*/

 if (N>L->length || N<1)

  return ERROR;

 /*删了一个元素,你后面的就要补上来,不然我们的表不就跟数组一样了。。。*/

 *e=L->data[N-1];/*看看删的是哪位仁兄*/

 /*没想到还是要搞特权,如果删除的是最后一位仁兄,他后面没兄弟了,不能补了,特批下吧*/

 if (N<=L->length)
 {
  /*移动了一大篇呀,泪奔呀。。。时间复杂度O(n)*/
  for (int i=N-1;i<L->length;i++)
  {

   L->data[i]=L->data[i+1];/*吼吼,前面买到火车票了,后面要票的的兄弟跟上*/

  }

 }

 L->length--;/*把你队伍人数减掉一个,不能虚报哟,可是要吃枪子的*/

 return OK;
}
/************************************************************************/
/*    插入第N个元素                                           */
/************************************************************************/

Status InsertElem(int N,LinkList *L,ElemType e)
{
 /*老话了,符合国情,100年不动摇*/

 if (L->length<1)

  return ERROR;

 if (N>L->length || N<1)

  return ERROR;

 /*移动元素,最好的办法就是从尾部往后面移动,注意不要越界了哟*/

 if (N>=MAXSIZE)
 {

  return ERROR;

 }

 /*插队分为正常排队和非法排队。。。*/

 if (N<=L->length)
 {

  /*缺陷呀,时间复杂度又是O(n)*/
  for (int i=L->length;i>=N-1;i--)
  {

   L->data[i]=L->data[i-1];

  }
 }

 L->data[N-1]=e;/*终于轮到男猪脚最后一插*/

 L->length++;

 return OK;

}

int main()

{

 /*好吧,初始化列表*/

 LinkList L;

 L.length=1;

 L.data[L.length-1]=0;

 

 /*先说说顺序表的优势吧。。。*/

 /*那就是读取元素,时间复杂度O(1). ps:不懂时间复杂度的编程同学,面壁去。。。*/
 ElemType e;

 GetElem(1,L,&e);

 printf("length:%d,Elem:%d\n",L.length,e);
 
 /*插入吧*/
 e=23;

 InsertElem(1,&L,e);

 printf("length:%d,Elem:%d\n",L.length,e);

 /*有得必有失,下面我们那删除一个元素看看。。*/
 e=NULL;

 DeleteElem(1,&L,&e);

 printf("length:%d,Elem:%d\n",L.length,e);
}

  

原文地址:https://www.cnblogs.com/273809717/p/2815736.html