(一)线性表

(一)顺序表

(1)顺序表的结构体定义

typedef struct
{
    int data[maxSize];   //默认int型,根据题目要求自行改变
    int length;
 } Sqlist  

考试常用顺序表定义

int A[maxSize];     //定义了一个长度为n,表内元素为整数的顺序表 
int n;   

(2)初始化顺序表表,创建一个空的线性表

void initList(Sqlist &L)     //表L本身要改变,所以使用引用型 
{
    L.length=0;
  }  

(3)判断顺序表是否为空

int IsEmpty(Sqlist L)
{
    return L.length==0;
 } 

(4)顺序表中按元素值查找

在顺序表中查找第一个值等于e的元素,并返回其下标

int FindElem(Sqlist L,int e)
{
    int i;
    for(i=0;i<L.length;++i)
        if(e==L.data[i])
            return i;
    return 0;         //未找到,返回0,作为失败标记 
 }

(5)顺序表中删除元素

删除顺序表中下标为p(0<=p<=L.length-1)的元素,成功返回1,否则返回0,并将被删除的元素赋值给e

int deleteElem(Sqlist &L,int p,int &e)
{
    int i;
    if(p<0||p>L.length-1)
        return 0;            //越界,删除失败,返回-1 
    e = L.data[p];
    for(i=p;i<L.length-1;++i)
        L.data[i]=L.data[i+1];        //从p位置开始,后面的元素前移 
    --(L.length);     //删除成功,表长减一 
    return 0;        //删除成功,返回0 
}

(6)顺序表中插入元素

在顺序表L的第p个位置插入新的元素e,如果p的输入不正确,返回0,否则返回1

int insertElem(Sqlist &L,int p,int e)
{
    int i;
    if(p<0||p>L.length||L.length=maxSize)
        return 0;    //插入失败,返回0
    for(i=L.length-1;i>=p;--i)
        L.data[i+1]=L.data[i];        //元素后移 
    L.data[p]=x;
    ++(L.length);        //表长加一 
    return 0;         //插入成功,返回0 
 }

(7)设计一个算法,将顺序表中的元素逆置

分析:使用两个变量  i  ,j  指示元素表中的第一个和最后一个元素,交换  i  , j   所指元素,然后  i  向后移,j   向前移,如此循环,指导 i   和  j相遇

void reverse(Sqlist &L)
{
    int i,j;
    int temp;        //辅助变量,用于交换 
    for(i =0,j=L.length-1;i<j;++i,--j)            //i ,j 相遇时,循环结束 
    {
        temp = L.data[i];
        L.data[i] = L.data[j];
        L.data[j] = temp;
    }
 } 

(8)删除顺序表L中下标 i  到  j  的(包括  i  j  )的所有元素

void delete(Sqlist &L,int i,int j)
{
    int k,delete;
    delete = j-i+1;   //元素要移动的距离
    for(k=j+1;k<L.length;++k)
    {
        L.data[k-delete]=L.data[k];        //用第k个元素去覆盖它前面的第delete个元素 
    }
    L.length = delete;          
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值