數據結構習題——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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章