数据结构——静态线性表操作(顺序表)

本文介绍了一种静态线性表的实现方式,并详细说明了包括初始化、销毁、清空、查询、插入、删除等基本操作的算法实现。通过具体的代码示例展示了如何使用这种数据结构进行高效的数据管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态线性表

#define  ListSize  100           //最大允许长度
typedef  struct { 
        ListData  data[ListSize] ;      //存储空间
        int  length;                      //当前元素个数
} SeqList;

// 1. InitList(&L);初始化线性表L为空表;
void InitList ( SeqList  &L )
{                                                    //初始化表L为空表
    L.length = 0;

// 2. DestroyList(&L)  销毁线性表L
void DestroyList(SeqList &L)            //回收线性表L
    {
         L.length=0;    
    }

//3. ClearList(&L)    清空线性表L
void ClearList(SeqList &L)         //清空线性表L
    {
        L.length=0; 
    }

// 4、 ListEmpty(SeqList L)  判断线性表L是否为空
int  ListEmpty(SeqList L) { //若为空返回1,否则返回0
            return(!(L.length)) ;    
    }

// 5. ListLength ( L ) 求表L的长度   
int ListLength ( SeqList  L )
   {                                       //函数值是表L的长度
     return(L.length); 
   }
//6.GetElem(L,i)函数值为线性表L中第i个元素
ListData GetElem(SeqList L,int i){
    if(1<=i &&i<=L.length)
        return(L.data[i-1]);
    else return "Error";
} 

//7.1LocateElem(L,x)查找位置
int LocateElem(SeqList L,ListData x){
    int i=0;
    while((i<L.length)&&(L.data[i]!=x))
        i++;
    if(i<L.length) return i;//成功 
        else return -1;//失败 
} 

//7.2 IsIn(L,x)判断是否在表中
int IsIn(SeqList L,ListData x){
    int i=0, found =0;
    while((i<L.length)&&!found){ 
        if(L.data[i]!=x) i++;
            else found=1;
    }
    return found; //存在返回1,否则返回0 
} 

//8.NextElem(L,x)求x的直接后继,若成功返回后继位置
//否则返回-1; 
int NextElem(SeqList L,ListData x){
    int i=0;
    while((i<L.length)&&L.data[i]!=x) i++;
    if((0<=i)&&(i<L.length)) return i+1;
        else return -1;
} 

//PriorElem(L,x),求x的直接前驱
int PriorElem(SeqList L,ListData x){
    int i=0;
    while(i<L.length&&L.data[i]!=x) i++;
    if((0<i)&&(i<L.length)) return i-1;
        else return -1;
} 

//10. ListInsert(&l,i,x)在顺序表L中第i个元素前
//插入x,成功返回1,否则返回0
int ListInsert(SeqList &L,int i,ListData x){
    if((i<1)||(i>L.length+1)||(L.length==ListSize))
        return 0;
    else {
        for(int j=L.length;j>i-1;j--)
            L.data[j]=L.data[j-1];
        L.data[i-1]=x;
        L.length++; return 1;   
    }
} 

//11.在顺序表L中删除第i个元素
int ListDelete(SeqList &L,int i){
    if((i<1)||(i>L.length)) return 0;
    L.length--;
    for(int j=i-1;j<L.length+1;j++)//前移 
        L.data[j]=L.data[j+1];
    return 1;//删除成功返回1 
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值