【C语言编程练习】7.1 线型表就地逆置

写在前面的话:直接从第5章跳到了第7章数据结构的趣题,原因是前面的数学趣题做久了,会觉得稍许疲倦,所以想“变个口味”,以后数学趣题和数据结构混合着练习。

 

1. 题目要求

编写一个函数,实现顺序表的就地逆置,也就是说利用原表的存储空间,将顺序表(a1,a2,a3,...,an)逆置为(an,an-1,...,a2,a1)

 

2. 题目分析

oh!太久没有看过数据结构的东西了,感觉非常的不习惯,脑子一片空白呢!

顺序表应该可以如下简单的描述

a->b->c->d->...

这里先简单复习一下顺序表吧

https://blog.csdn.net/liubo_01/article/details/80186552

网上有很多关于顺序表的东西了

 

3. 代码尝试

#include "stdio.h"

 

#define MAXSIZE 10

 

/*定义一个顺序表类型*/

 

typedef struct{

    int *base;

    int length;

}sqlist;

 

reverseSQ(sqlist *l){

    int low = 0,high = l->length-1;//分别指向顺序表首尾

    int buf,i;

    for(i=0;i<l->length/2;i++){

        buf = l->base[low];

        l->base[low]=l->base[high];

        l->base[high]=buf;

        low++;

        high--;

    }

}

int main(){

    sqlist l;

    int a,i=0;

    //创建一个顺序表

    l.base = (int*)malloc(sizeof(int)*MAXSIZE);

    l.length = 0;

 

    //输入数据

    printf("please input below 10 integer into the sqlist.\n");

    printf("please type -1 for stopping input\n");

    scanf("%d",&a);

    while(a!=-1&&i<=9){

        l.base[i]=a;

        l.length++;

        i++;

        scanf("%d",&a);

    }

 

    //输出原来表的数据

    printf("the contents of the sqlist are\n");

    for(i=0;i<l.length;i++){

        printf("%d",l.base[i]);

    }

    printf("\n");

 

    //就地逆置顺序表

    printf("%d",&l);

    reverseSQ(&l);

 

    printf("the contents of the reversed sqlist are\n");

    for(i=0;i<l.length;i++){

        printf("%d",l.base[i]);

    }

    return 0;

}

 

4. 总结

 

线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素。

采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构。

 

 

 

10 typedef struct

11 {

12     int * elem;               //采用动态存储分配结构

13     int length;

14     int listsize;

15 }sqlist;

 

转载于:https://www.cnblogs.com/mumutoday/p/10549419.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值