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

         输出的结果为:

 


 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值