顺序表

定义

线性表是n(0)个元素a0,a1,…,an-1 的线性序列,记为: (a0,a1,…,an-1)。其中n是线性表中元素的个数,称为线性表的长度;n=0时称为空表。 ai是表中下标为i的元素(i=0,1,…,n-1),称ai是ai+1的直接前驱元素,ai+1是ai的直接后继元素。 线性表是动态数据结构,它的表长可以改变。

线性表ADT 

ADT LinearList {

数据:

    0个或多个元素的线性序列(a0,a1,...,an-1),其最大允许长度为MaxListSize。

运算:

          Create(): 创建一个空线性表。

          Destroy():撤消一个线性表。

          IsEmpty():若线性表空,则返回true;否则返回false。

          Length(): 返回表中元素个数。

Find(i,x):在x中返回表中下标为i的元素ai。若不存在,则返回false,否则返回true。

Search(x):若x不在表中,则返回-1,否则返回x在表中的下标。

Insert(i,x):在元素ai之后插入x。若i=-1,则x插在第一个元素a0前。若插入成功,则返回true,否则返回false。

Delete(i):删除元素ai。若删除成功,则返回true,否则返回false。

Update(i,x):将元素ai的值修改为x。若修改成功,则返回true,否则返回false。

Output(out):把表送至输出流

}   //                       插入x到表:(a0,a1,...,an-1)

#include "stdio.h"

#ifndef ElemType
#define ElemType int
/*typedef int ElemType;*/ /*在实际应用中,将ElemType定义成实际类型*/
#endif

#ifndef SQ_List              /*或 #if !defined(SQList)*/
#define SQ_List

#define MaxLen  100         /*线性表的容量,线性表存储元素个数*/
typedef struct{
ElemType data[MaxLen],x;      /*定义存储表中元素的数组*/
int Length;                 /*线性表的实际长度*/
}sqList;

void InitList(sqList *L){L->Length=0;}/*初始化线性表*/

int GetLen(sqList *L){return L->Length;}/*求线性表长度*/

ElemType &GetElem(sqList *L,int i)/*求线性表第i个元素的值,i=1~n*/
{if(i<1||i>L->Length)return L->x;  /*若元素值不可为0时*/
 return L->data[i-1];}

int Locate(sqList *L,ElemType x)/*查找值为x元素的位置(1~n),没找到返回0*/
{int i;
for(i=0;i<L->Length;i++){if(L->data[i]==x)return i+1;}
return 0;}

int InsElem(sqList *L,int i,ElemType x)/*第i位置插入元素x,i=1~n*/
{int j;
 if(L->Length==MaxLen)return 0;/*表已满*/ 
 if(i<1||i>L->Length+1)return 0;/*插入位置出错*/
 /*//if(i<1)i=1;if(i>L->Length+1)i=L->Length+1;*/
 for(j=L->Length;j>=i;j--)L->data[j]=L->data[j-1];/*第i~n个元素后移1位*/ 
 L->data[i-1]=x;       	              /*第i位置插入x*/
 L->Length++;  		              /*表长度加1 */
 return 1;
}

int DelElem(sqList *L,int i)/*删除线性表中第i个位置上的元素*/
{int j;
 if(i<1||i>L->Length)return 0;/*检查删除位置的合法性{printf("不存在第i个元素");}*/
 for(j=i;j<=L->Length-1;j++)
  L->data[j-1]=L->data[j];  /*第i~n个元素向前移动1位*/
 L->Length--;return 1;
}

void DispList(sqList *L)/*顺序表元素输出*/
{int i;
 if(L->Length==0){printf("空表\n");return;}
 for(i=0;i<=L->Length-1;i++)
  printf("%d,",L->data[i]);  /*第i~n个元素向前移动1位*/
 printf("\n");
}

#endif





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值