【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

时间: 2024-11-05 21:50:27

【C语言编程练习】7.1 线型表就地逆置的相关文章

6-1 顺序表创建和就地逆置 (10 分)

本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(SqList &L)是在不引入辅助数组的前提下将顺序表中的元素进行逆置,如原顺序表元素依次为1,2,3,4,则逆置后为4,3,2,1. 函数接口定义: Status ListCreate_Sq(SqList &L); void ListReverse_Sq(SqList &L); 裁判测试程序样例: //库函数

线性表之顺序表奇偶调整和单链表就地逆置

线性表之顺序表奇偶调整,就是指将顺序表的奇数与偶数位置互换,以最优方法解决,因为方法很多,比如,开辟一个新的顺序表分别存放奇偶数,也可以从头向后寻找奇偶数放置到尾部或头部,但这些都会增大时间与空间的消耗.最优法则是前后分别寻找奇偶不同类型数,满足前奇后偶(或前偶后期),交换两数位置,实现时间复杂度O(n),空间O(1)的方案. void AdjustSqlist(SeqList *L) { int i=0,j=L->last; int temp; while(i<j) { while(L-&g

顺序表之就地逆置算法

1 #include<stdio.h> 2 #define MAX 10 3 typedef int ElementType; 4 int length=0; 5 int value; 6 typedef struct { 7 ElementType i; 8 int length; 9 ElementType data[MAX]; 10 }Sorder; 11 int main(){ 12 Sorder L; 13 //往顺序表中塞入数据 14 for(int i=0;i<MAX;i+

数据结构c语言中单链表就地逆置问题

法一: list_node *list_reverse(list_node *head) { list_node *p = head->next; list_node *q = NULL; head->next = NULL; while(p != NULL) { q = p->next;          /*保存下一个节点*/ p->next = head->next; /*把节点插入到头结点后面*/ head->next = p;       /*头结点一直指向最

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

linux 操作系统下c语言编程入门

2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编

R语言编程艺术(2)R中的数据结构

本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ========================================================================= R语言最基本的数据类型就是向量(vector),单个数值和矩阵都是向量的一种特例. 声明:R中不需要声明变量,但是注意函数式语言的特性,如果读写向量中的元素时,R事先不知道对象是向量的话,则函数没有执行的对象.如下代码是无法工作的: y[1]

linux下的c语言编程学习笔记

视频参看csdn学院王阳和下面的linux环境下c语言编程基础相当的经典,其中王阳的视频讲的很好,相当的经典 编译hellogcc.c需要依赖/home目录下的头文件 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别. 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ...

这些Linux操作系统下C语言编程注意事项,你都注意到了吗?

以下这些Linux操作系统下C语言编程注意事项,你都注意到了吗? 1工具的使用 1.学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找.定位.替换等.新手的话推荐使用vim,这也是我目前使用的文本编辑器. 2.学会makefile文件的编写规则,并结合使用工具aclocal.autoconf和automake生成makefile文件. 3.掌握gcc和gdb的基本用法.掌握gcc的用法对于构建一个软件包很有益处,当软件