线性表的就地逆置的程序代码怎么写?
线性表的就地逆置问题描述:利用线性表原有的存储空间将线性表(a1,a2,…,an-1,an)逆置为(an,an-1,…,a2,a1)基本要求:编写程序,对由键盘输入的有n...
线性表的就地逆置
问题描述:
利用线性表原有的存储空间将线性表
( a1,a2,…,an-1,an )
逆置为
(an,an-1,…,a2,a1 )
基本要求:
编写程序,对由键盘输入的有n个元素的线性表,输出其逆置前和逆置后的所有元素
线性表的长度n也通过键盘输入
无论输入还是输出,要给出适当的提示信息
分别用静态顺序结构和单链表实现
测试数据:
(1)n=11,线性表的n个元素分别为:1,9,5,7,1,2,1,1,4,2,1
(2)n=8, 线性表的n个元素分别为:8,6,1,9, 2,5,0,1
实现提示:
程序运行后
首先提示输入线性表的长度
然后输入线性表的元素
紧接着输出线性表的各元素
然后再输出逆置后的线性表的各元素 展开
问题描述:
利用线性表原有的存储空间将线性表
( a1,a2,…,an-1,an )
逆置为
(an,an-1,…,a2,a1 )
基本要求:
编写程序,对由键盘输入的有n个元素的线性表,输出其逆置前和逆置后的所有元素
线性表的长度n也通过键盘输入
无论输入还是输出,要给出适当的提示信息
分别用静态顺序结构和单链表实现
测试数据:
(1)n=11,线性表的n个元素分别为:1,9,5,7,1,2,1,1,4,2,1
(2)n=8, 线性表的n个元素分别为:8,6,1,9, 2,5,0,1
实现提示:
程序运行后
首先提示输入线性表的长度
然后输入线性表的元素
紧接着输出线性表的各元素
然后再输出逆置后的线性表的各元素 展开
3个回答
2013-07-24
展开全部
1. 顺序表:
要将该表逆置,可以将表中的含派开始结点与终端结点互换,第二个结点与倒数第二个结点互换谈巧贺,如此反复,就可将整个表逆置了。算法如下:
// 表结构定义同上
void ReverseList( Seqlist *L)
{
Datatype t ; //设置临时空间用于存放data
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 ;
}
}
2. 链表:
也是可以用交换数据的方式来达到逆置的目的,但是由于是单链表,数据的存取不是随机的,因此算法效率太低,我们可以利用指针的指向转换来达到表逆置的目的。算法是这样的:
// 结构定义略
LinkList ReverseList( LinkList head )
{
// 将head 所指的单链表逆置
ListNode *p ,*q ;//设置两个临时指针变量
if( head->next && head->next->next)
{
//当链表不是空表或单结点时
p=head->next;
q=p->next;
p -> next=NULL;//将开始结点变成终端结点
while (q)
{//每次循环将后一个结点变成开始宽弯结点
p=q;
q=q->next ;
p->next = head-> next ;
head->next = p;
}
return head;
}
return head;//如是空表或单结点表,直接返回head
}
楼上的代码胡弄洋鬼子呢,也没实现逆置,只是逆向输出了一下!
要将该表逆置,可以将表中的含派开始结点与终端结点互换,第二个结点与倒数第二个结点互换谈巧贺,如此反复,就可将整个表逆置了。算法如下:
// 表结构定义同上
void ReverseList( Seqlist *L)
{
Datatype t ; //设置临时空间用于存放data
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 ;
}
}
2. 链表:
也是可以用交换数据的方式来达到逆置的目的,但是由于是单链表,数据的存取不是随机的,因此算法效率太低,我们可以利用指针的指向转换来达到表逆置的目的。算法是这样的:
// 结构定义略
LinkList ReverseList( LinkList head )
{
// 将head 所指的单链表逆置
ListNode *p ,*q ;//设置两个临时指针变量
if( head->next && head->next->next)
{
//当链表不是空表或单结点时
p=head->next;
q=p->next;
p -> next=NULL;//将开始结点变成终端结点
while (q)
{//每次循环将后一个结点变成开始宽弯结点
p=q;
q=q->next ;
p->next = head-> next ;
head->next = p;
}
return head;
}
return head;//如是空表或单结点表,直接返回head
}
楼上的代码胡弄洋鬼子呢,也没实现逆置,只是逆向输出了一下!
2013-07-24
展开全部
很久没碰过程序了。。。
main()
{
int n,i;
int a[100];
printf("请输入线性表的长度\n");
scanf("%d",&n);
printf("请输入线性汪弊纤表的元素\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
printf("线性表的各元素为:%d, ",a[i]);
printf("\n");
getch();
for(i=n;i>0;i--)
printf("逆置后的线性表的困仿各卜毁元素为:%d,",a[i]);
printf("\n");
getch();
}
main()
{
int n,i;
int a[100];
printf("请输入线性表的长度\n");
scanf("%d",&n);
printf("请输入线性汪弊纤表的元素\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
printf("线性表的各元素为:%d, ",a[i]);
printf("\n");
getch();
for(i=n;i>0;i--)
printf("逆置后的线性表的困仿各卜毁元素为:%d,",a[i]);
printf("\n");
getch();
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-24
展开全部
什么呀,不就是逆序又输出一遍嘛,忽悠谁呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |