顺序表元素的逆置

直接上代码

#include<stdio.h>
#include<stdlib.h>
#define LIST_SIZE1 10
#define LIST_SIZE2 5
#define ok 1
#define no 0 
typedef struct {
	int *elem;
	int length;
	int listsize;
}Sqlist;
//初始化一个顺序表
int InitList(Sqlist *l){
	l->elem=(int *)malloc(LIST_SIZE1*sizeof(int));
	if(!l->elem) exit(ok);
	l->length=0;
	l->listsize=LIST_SIZE1;
	return ok;
} 
//在顺序表中的第i个位置插入元素e
int ListInsert(Sqlist *l,int i,int e){
	if(!l->length){
		l->length++;
		l->elem[l->length-1]=e;
		return ok;
	}
	else if(i<1||i>l->length+1){
		printf("输入的位置有误!\n");
		exit(ok);
	}
	if(l->length==l->listsize){
		int *newbase;
		newbase=(int *)realloc(l->elem,(l->length+LIST_SIZE2)*sizeof(int));
		if(!newbase) exit(ok);
		l->elem=newbase;
		l->listsize+=LIST_SIZE2;
	}
	int *p;
	p=l->elem+l->length-1;
	while(p>=l->elem+i-1)
		*(p+1)=*p--;
	l->elem[i-1]=e;
	l->length++;
	return ok;
} 
//实现顺序表的逆置
int ListInvert(Sqlist *l){
	int t,i;
	int *head=l->elem,*end=l->elem+l->length-1;
	for(i=0;i<l->length/2;i++){
		t=*(head+i);
		*(head+i)=*(end-i);
		*(end-i)=t;
	}
	return ok;
} 
//输出顺序表中的数据
void Outlist(Sqlist *l){
	int i;
	for(i=0;i<l->length;i++)
		printf("%d ",l->elem[i]);
	printf("\n");
} 
int main(){
	Sqlist l;
	InitList(&l);
	printf("请输入一组数据(0表示结束)\n");
	int num,i=1;
	scanf("%d",&num); 
	while(num){
		ListInsert(&l,i,num);
		i++;
		scanf("%d",&num);
	}
	printf("顺序表中的元素有\n");
	Outlist(&l);
	ListInvert(&l);
	printf("转置后的结果为\n");
	Outlist(&l);
	return ok;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值