Leap Day5——数据结构与算法 线性表基础练习题

目录

 1、顺序表

 1.1  存储定义

1.2  构造顺序表

1.3  静态初始化顺序表

1.4  顺序表的元素输出

1.5  顺序表的 插入

1.6  顺序表的删除

1.7  顺序表的取值

1.8  顺序表的查找

2、单链表 

2.1  单链表的存储定义

 2.2  头插法创建单链表

 2.3  单链表的插入

2.4  单链表的删除

 2.5  单链表的取值

 2.6  单链表的查找


 1、顺序表

 1.1  存储定义

顺序表的存储定义 

typedef struct{
    int *elem;
    int length;
}SqList;

1.2  构造顺序表

顺序表的初始化,构造一个空的顺序表 

void InitList(SqList &L){
    L.elem = new int[MAXSIZE];
    L.length = 0;
} 

1.3  静态初始化顺序表

从键盘上依次输入21、18、30、75、42、56,创建顺序表。

void InputList(SqList &L,int n){
    int i;
    for(i=0;i<n;i++){
        scanf("%d",&L.elem[i]);
        L.length++;    
    }
}

1.4  顺序表的元素输出

输出顺序表中的各元素值。

void OutputList(SqList &L){
    int i;
    for(i=0;i<n;i++){
        printf("%d",&L.elem[i]);
    }
}

1.5  顺序表的 插入

分别在顺序表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出顺序表中的各元素值。

Status ListInsert (SqList &L,int i,int e){
    if((i<1)||(i>L.length+1))    return ERROR;
    if(L.length==MAXSIZE)    return ERROR;
    for(int j=L.length-1;j>i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;
    ++L.length;
    return OK;
}

1.6  顺序表的删除

删除顺序表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。

Status ListDelete(SqList &L,int i){
    if((i<1)||(i>L.length))    return ERROR;
    for(int j=i;j<L.length;j++)
        L.elem[j-1]=L.elem[j];
    --L.length;
    return OK;
}

1.7  顺序表的取值

取顺序表中的第5个数据元素和第7个数据元素。

Status GetElem(SqList L,int i,int e){
    if(i<1||i>L.length)    return ERROR;
    e = L,elem[i-1];
    return OK;
} 

1.8  顺序表的查找

查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。

Status LocatElem(SqList L,int e){
    for(int i=0;i<L.length;i++){
        if(L.elem[i]==e)
            return i+1;
    }
    return ERROR;
}

2、单链表 

2.1  单链表的存储定义

单链表的存储定义

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNOde,*LinkList;

 2.2  头插法创建单链表

从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。

void GreateList(LinkList &L,int n){
    L=(LinkList)malloc(sizeof(LNode));
    //L = new LNode;
    L->next = NULL;
    for(i=n;i>0;i--){
        p = new LNode
        scanf("%d",&p->data);
        p->next = L->next;
        L->next = p;
    }
} //GreateList

 2.3  单链表的插入

分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。

Status ListInsert(LinkList &L,int i,ElemType e){
    p=L;
    j=0;
    while(p&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return ERROR;
    s = new LNode;
    s->data = e;
    s->next = p->next;
    p->next = s;
    return OK;
}//LinkList

2.4  单链表的删除

删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。(带头结点) 

Status ListDelete(LinkList &L,int i,ElemType &e){
    p=L;
    j=0;
    while(p->next&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return ERROR;
    q = p->next;
    p->next = q->next;
    e = q->data;
    free(q);
    return OK;
} 

 2.5  单链表的取值

取单链表中的第5个数据元素和第7个数据元素(带头结点)

Status GetElem(LinkList L,int i,ElemType &e){
    p = L->next;
    j=0;
    while(p&&j-1){
        p=p->next;
        ++j;
    }
    if(!p||j>i)    return ERROR;
    else    e=p->data;
    return OK; 
}//GetElem

 2.6  单链表的查找

在单链表中查找值为30和90的数据元素。

Statue Locate(Linklist L,int e){
    p = L->next;
    j=0;
    while(p&&p->data!=e){
        p=p->next;
        ++j;
    } 
    if(p)
        return j; 
    else
        return ERROR;
} //LocateElem L
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值