顺序表的就地逆置

家里的小朋友有个作业不会,让我帮忙弄弄,题目是这样的:编写一个函数,实现顺序表的就地逆置,也就是说利用原表的存储空间将顺序表(a1,a2…an)逆置为(an,an-1…a2,a1)。

百度搜了一下,有这样的答案:

    让我们能想到的是,利用使用三个指针,分别指向开始,中间,结束。元素。通过中间元素实现,开始元素和结束元素的交换,然后,开始元素的指针加一,结束元素的指针减一,这样循环下去,当开始元素的指针不小于中间元素指针时停止。
    代码如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct{
  4.      int *base;
  5.      int length;
  6. } sqlist;
  7. void reverseSQ(sqlist *l)
  8. {
  9.      int low = 0, high = l->length – 1;
  10.      int buf, i, count = l->length / 2;
  11.      for(i=0; i<count; i++){
  12.      buf = l->base[low];
  13.      l->base[low++] = l->base[high];
  14.      l->base[high–] = buf;
  15.      }
  16. }
  17. void printSQ(sqlist *l)
  18. {
  19.      int i = 0;
  20.      for(i=0; i<l->length; i++)
  21.      printf(“%d “,l->base[i]);
  22.      printf(“\n”);
  23. }
  24. int main(int argc, char *argv[])
  25. {
  26.      sqlist l;
  27.      int a,i = 0;
  28.      int cnt = 0;
  29.      printf(“please input count num:”);
  30.      scanf(“%d”,&cnt);
  31.      l.base = (int *)malloc(sizeof(int) * cnt);
  32.      l.length = 0;
  33.      while(i < cnt){
  34.      scanf(“%d”,&a);
  35.      l.base[i++] = a;
  36.      l.length++;
  37.      }
  38.      printf(“the contents of the sqlist are\n”);
  39.      printSQ(&l);
  40.      reverseSQ(&l);
  41.      printf(“the contents of the reversed sqlist are\n”);
  42.      printSQ(&l);
  43.      free(l.base); //释放内存
  44.      return 0;
  45. }
运行结果:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc -Wall 7.1-1.c
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out
please input count num:5
1 2 3 4 5
the contents of the sqlist are
1 2 3 4 5
the contents of the reversed sqlist are
5 4 3 2 1
转自:http://blog.chinaunix.net/uid-20680669-id-361871.html
她说里面很多语法没学,看不懂,好吧,再来个简单的,用数组解决的:
#include "stdio.h"
#define N 100
void main()
{
   int a[N];//定义数组
   int n,i,temp;
   printf("input the length of array:");
   scanf("%d",&n);//n为需要输入的元素个数
   for(i=0;i<n;i++)
       scanf("%d".&a[i]);
   printf("First:");
   for(i=0;i<n;i++)
      printf("%-3d",a[i]);
   printf("\n");
   //交换过程
  for(i=0;i<n/2;i++)
  {
     temp=a[i];
     a[i]=a[n-i-1];
     a[n-i-1]=temp;
 }
 printf("End:");
 for(i=0;i<n;i++)
     printf("%-3d",a[i]);
 printf("\n");
}
运行一下是这样的:
input the length of array:6
1 2 3 4 5 6
First:1 2 3 4 5 6
End:6 5 4 3 2 1

还要求用函数的形式做,真是麻烦啊,C语言已经有十几年没碰了。。。
#include "stdio.h"
#define N 100
void reverse(int a[],int size)
{
 int i,temp;
 for(i=0;i<size/2;i++)
 {
 temp=a[i];
 a[i]=a[size-1-i];
 a[size-1-i]=temp;
 }
 printf("end:");
 for(i=0;i<size;i++)
 printf("%-3d",a[i]);
}
void main()
{
 int a[N];
 int i,size;
 printf("input the length of array:");
 scanf("%d",&size);
 for(i=0;i<size;i++)
 scanf("%d",&a[i]);
 printf("first:");
 for(i=0;i<size;i++)
 printf("%-3d",a[i]);
 printf("\n");
 reverse(&a,size);
}
此条目发表在程序设计分类目录,贴了, 标签。将固定链接加入收藏夹。