关于数据结构(C语言)的问题~!

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:30:26
试分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,...an-1)就地逆置的操作,所谓"就地"指辅助空间应为O(1)。
下面是我自己写的,刚刚学,很多地方是借鉴来的,希望懂的高手帮我分析下.谢谢了.

#include<stdio.h>
#include<stdlib.h>
typedef int Datatype;
typedef struct{
Datatype data[20];
int length;
}Seqlist;
void ReverseList( Seqlist *L)
{
Datatype t ;
int i;
for ( i=0 ; i < L->length/2 ; i++)
{ t = L->data[i];
L -> data[ i ] = L -> data[ L -> length - 1 - i ] ;
L -> data[ L -> length - 1 - i ] = t ;
}
}
void InitList(Seqlist *L)
{
L->length=0;
}
void main()
{
int i;
Seqlist *p=new Seqlist;
InitList(p);
for(i=0;i<10;i++)
p->data[i]=i;
ReverseList(p);
for(i=0;i<10;i++)
printf("%d ",p->data[i]);
}

Seqlist是一个结构体类型,含有一个整型数组和一个存储数组元素个数的length变量。函数InitList()的作用是使数组元素个数归零,然后你在主函数中给Seqlist的实例p赋值了。接下来ReverseList()的作用是让数组元素倒序,其实也就是把第一个和最后一个元素调换,第二个和倒数第二个元素调换……一直到第length/2个元素和倒数第length/2个元素调换。最后输出。

程序中的错误:
1.
Seqlist *p=new Seqlist;
这不是MFC!要这样写:
Seqlist *p=(Seqlist *)malloc(sizeof(Seqlist));

2.
p中的length变量未重新赋值,始终为0
在ReverseList(p); 前加上
p->length=i;