DS之顺序表实现输入数据逆置

实现输入数据逆置和顺序表实现排序是两个极其相似的过程,因此使用的顺序表的基本操作也是一样的:0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素。

要想实现输入数据元素的逆置还需要一个逆置函数,逆置函数在C++,C#语言中早已接触过,因此不陌生,记得在做大量的C++的程序代码补充的大题就写过不下数十遍,挺简单的掌握技巧,就是你输入数据的个数的一半,前后进行交换,因此逆置函数的代码为:

<span style="font-size:18px;">//逆置函数
void nizhi(SqList &L)
{
    for(int i=0;i<L.length/2;i++)
    {
	   int temp;
	   temp=L.elem[i];
	   L.elem[i]=L.elem[L.length-1-i];
       L.elem[L.length-1-i]=temp;
    }
 }</span>

而在主函数中只需要声明一个顺序表,输入顺序表数据元素的个数和数据,调用逆置函数,即可实现。完整的顺序表实现输入数据逆置的代码为:

<span style="font-size:18px;">#include <iostream>
using namespace std;
#include <malloc.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct
{
	ElemType *elem;
	int length;
	int listsize;
}SqList;//定义了一个结构体类型,并命名为Sqlist
//1初始化顺序表
Status InitList(SqList &L)
{
    L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
	if(!L.elem)
    {
       exit(OVERFLOW);
	}
	L.length=0;//长度为0
	L.listsize=LIST_INIT_SIZE;
 	return OK;
}
//6向顺序表插入数据元素
Status ListInsert(SqList &L,int i, ElemType e)
{
	if(i<1||i>L.length+1)
	{
		return ERROR;
	}
	if (L.length>=L.listsize)
	{
        ElemType * newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT )*sizeof(ElemType));
        if(!newbase)
		{
			exit(OVERFLOW);
		}
        L.elem=newbase;
        L.listsize+=LISTINCREMENT;
	}
    ElemType *q=&(L.elem[i-1]);
    ElemType *p;
	for(p=&(L.elem[L.length-1]);p>=q;--p)
	{
		*(p+1)=*p;
	}
	*q=e;
	++L.length;
	return OK;
}
//逆置函数
void nizhi(SqList &L)
{
    for(int i=0;i<L.length/2;i++)
    {
	   int temp;
	   temp=L.elem[i];
	   L.elem[i]=L.elem[L.length-1-i];
       L.elem[L.length-1-i]=temp;
    }
 }
int main()
{ 

	SqList La;
    InitList(La);
	ElemType e;
    int na;
    cout<<"请输入La中数据的个数:";
	cin>>na;
	for(int i=1;i<=na;i++)
	{
	      cin>>e;
	      ListInsert(La,i,e);
	}
	nizhi(La);//调用逆置函数
    for(i=0;i<La.length;i++)
	{
		cout<<La.elem[i]<<",";
	}
    cout<<endl;
    return 0;
}</span>

输入数据为:顺序表的个数为10

输入的数据元素为:0 1 2 3 4 5 6 7 8 9

输出的结果为:

时间: 2024-07-29 13:09:36

DS之顺序表实现输入数据逆置的相关文章

DS之顺序表实现乱序输入顺序输出

顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出.今天就来用顺序表实现乱序输入,顺序输出(升序). 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 自己只需写一个排序的函数,排序函数的代码为: <span style="font-size:18px;">//排序函数 void paixu(SqList &L) { for(int i=0;i<L.

用顺序表实现一个循环队列

队列是一种先进先出的线性表,简称FIFO.允许插入的一端为队尾,允许出列的一端为队头. 比如一个队列q=(p1,p2,p3,p4...pn),p1就是那个队头,pn就是队尾.出列时总是从p1开始 向后,入列时总是从pn后面插入.就像敲键盘,依次敲qwr,屏幕上显示的就是qwr,先敲的先显 示. 以下代码是用顺序表实现一个循环队列 1 /** 2 * @filename queue.c 3 * @author haohaibo 4 * @data 2017/4/12 5 * @brief 用顺序表

顺序表之就地逆置算法

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+

利用数组创建的顺序表实现各种功能

主函数main.c #include "func.h" #define MAXSIZE 100 INT32 main( void ) { INT32 temp[MAXSIZE] = {NULL}, f = 0, OSM = 1; OSM = create_SL (temp); do { OSM = OSM_Printf("\n\t========================================\n"); OSM = OSM_Printf("

各路大神大显神通!帮帮忙如何使用顺序表实现以下任务

5r0lp9k32a伟矢汗仲颐窍郊系拖脑<http://weibo.com/p/230927987720190915518464> aki6we5yzu占麓仕掩妒辖枚睬啥刭<http://weibo.com/p/230927987720126407122944> vxbanbazps律男烁稳倮酝肺肺苫捶<http://weibo.com/p/230927987723046619975680> n3o87qg51q刀纺芈徽萍炙泊偬切塘<http://weibo.co

用顺序表实现求两个集合的并集

#include<iostream.h> #include<malloc.h> #include<limits.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<stdlib.h> #include<process.h> #define OK 1 #define INIT_LiST_SIZE 100//顺序表的初始长度 #de

c++:用顺序表实现简单的栈

main.cpp #include<iostream> #include<string> #include"Stack.hpp" using namespace std; void test1(){                     //测试 Stack<int> s1; s1.Push(1); s1.Push(2); s1.Push(3); s1.Push(4); s1.Pop(); s1.Pop(); s1.Pop(); s1.Pop();

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

写在前面的话:直接从第5章跳到了第7章数据结构的趣题,原因是前面的数学趣题做久了,会觉得稍许疲倦,所以想“变个口味”,以后数学趣题和数据结构混合着练习. 1. 题目要求 编写一个函数,实现顺序表的就地逆置,也就是说利用原表的存储空间,将顺序表(a1,a2,a3,...,an)逆置为(an,an-1,...,a2,a1) 2. 题目分析 oh!太久没有看过数据结构的东西了,感觉非常的不习惯,脑子一片空白呢! 顺序表应该可以如下简单的描述 a->b->c->d->... 这里先简单复习

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

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