数据结构习题——2线性表的就地逆置

time_limit

3000MS

memory_limit

10000KB

description

试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,an)逆置为(an,an-1,…,a1)。

  1. 以一维数组作存储结构。
  2. 以单链表作存储结构。

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;
}

猜你喜欢

转载自blog.csdn.net/qq_41858784/article/details/82180179
今日推荐