time_limit | 3000MS |
memory_limit | 10000KB |
description | 试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,an)逆置为(an,an-1,…,a1)。
|
input | 第一行输入线性表元素个数elenum;(0<elenum<1000) 第二行输入elenum个数,作为线性表中的元素(a1,a2,…,an)。 |
output | 分两行分别输出要求(1)和要求(2)的线性表逆置结果(an,an-1,…,a1)。 |
sample_input | 5 2 5 3 7 15 |
sample_output | 15 7 3 5 2 15 7 3 5 2 |
#include<stdio.h>
#include<stdlib.h>
typedef struct SeqList {
int *a;
int length;
int Size;
}SeqList,*PList;
typedef struct Node{
int a;
struct Node *next;
}LNode,*Linklist;
Linklist listInit(int *data,int n)
{
Linklist head,p,q;
int i;
head=(LNode *)malloc(sizeof(LNode));
p=head;
for(i=0;i<n;i++){
q=(LNode *)malloc(sizeof(LNode));
q->a=data[i];
p->next=q;
p=q;
}
q->next=NULL;
return head;
}
void listdaozhi(Linklist head)
{
int tdata;
Linklist p ,q ,t;
p=head->next;
if(!p)return;
q=p->next;
if(!q)return;
t=q->next;
if(!t){
tdata=p->a;
p->a=q->a;
q->a=tdata;
return;
}
p->next=NULL;
while(t!=NULL){
q->next=p;
head->next=q;
p=q;
q=t;
t=t->next;
}
head->next=q;
q->next=p;
}
void listshow(Linklist head)
{
int i=0;
Linklist p;
p=head->next;
while(p!=NULL){
if(i!=0)printf(" ");
printf("%d",p->a);
p=p->next;
i++;
}
printf("\n");
}
void SeqList_daozhi(PList p)
{
int left,right,t;
left=0,right=p->length-1;
for(;left<right;left++,right--){
t=p->a[left];
p->a[left]=p->a[right];
p->a[right]=t;
}
}
void SeqList_Init(PList base,int *s,int n)
{
int i;
base->a=(int *)malloc(sizeof(int)*1000);
base->Size=1000;
base->length=0;
for(i=0;i<n;i++){
base->a[i]=s[i];
base->length++;
}
}
void SeqList_Show(PList p)
{
int i;
for(i=0;i<(p->length);i++){
if(i!=0)printf(" ");
printf("%d",p->a[i]);
}
printf("\n");
}
int main()
{
SeqList aaa;
PList p=&aaa;
Linklist head;
int n,a[1000],i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
SeqList_Init(p,a,n);
SeqList_daozhi(p);
SeqList_Show(p);
head=listInit(a,n);
listdaozhi(head);
listshow(head);
return 0;
}