链表与数组的比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表与数组的比较相关的知识,希望对你有一定的参考价值。

 

 

1 静态数组

2 动态数组

 

1 静态数组

 

  1 #define _CRT_SECURE_NO_WARNINGS
  2 
  3 #include <stdio.h>
  4 #include <stdlib.h>
  5 
  6 //作为静态数组,无法变长,一旦分配内存,就固定了,不可以增加
  7 //外部的内存可以访问,但是外部内存可能被使用,也可能没有被使用
  8 //没有使用的情况下,越界偶尔会成功,还是可能被再次回收利用
  9 //已经使用,必然失败
 10 //a[n]等价于*(a+n);从数组名首地址开始,往下寻址,取出内容,数组不会检测越界
 11 //偶尔会成功,偶然的成功比必然的失败更加可怕,数组不可以越界
 12 
 13 main1()
 14 {
 15     int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
 16 
 17     printf("%x\n", a);
 18 
 19     system("pause");
 20 }
 21 
 22 //静态数组,不可以处理较大的数据
 23 
 24 main2()
 25 {
 26     int b[1024 * 014 * 10];//默认数组在栈上,最大只能使用1MB
 27 
 28     printf("%x\n", b);
 29 
 30     system("pause");
 31 }
 32 
 33 main3()
 34 {
 35     int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
 36     int i, j;
 37     int length = sizeof(a) / sizeof(int);
 38 
 39     for (i = 0;i < length;i++)
 40     {
 41         printf("%d\n", a[i]);
 42     }
 43 
 44     int num = 8;//要删除的元素
 45 
 46     if (num == a[9])//检测最后一个元素
 47     {
 48         length = length - 1;//删除一个元素,元素在末尾
 49     }
 50     else
 51     {
 52         for (i = 0;i < length - 1;i++)//检测最后一个之前
 53         {
 54             if (a[i] == num)
 55             {
 56                 for (j = i;j < length - 1;j++)//从删除的位置开始,到最后一个全部向前移动
 57                 {
 58                     a[j] = a[j + 1];//逐个向前移动赋值
 59                 }
 60                 length = length - 1;
 61                 break;
 62             }
 63         }
 64     }
 65 
 66     printf("尾部删除以后\n");
 67     for (i = 0;i < length;i++)
 68     {
 69         printf("%d\n", a[i]);
 70     }
 71 
 72     system("pause");
 73 
 74 }
 75 
 76 //查询方便
 77 main4()
 78 {
 79     int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
 80     int i;
 81     int flag = 0;
 82     int length = sizeof(a) / sizeof(int);
 83 
 84     for (i = 0;i < length;i++)//逐个访问数组每个元素
 85     {
 86         if (a[i] == 7)//查询
 87         {
 88             flag = 1;
 89             break;
 90         }
 91     }
 92 
 93     if (flag == 1)
 94     {
 95         printf("找到");
 96     }
 97 
 98     system("pause");
 99 }
100 
101 //修改方便
102 main()
103 {
104     int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
105     int i;
106     int flag = 0;
107     int length = sizeof(a) / sizeof(int);
108 
109     for (i = 0;i < length;i++)//逐个访问数组每个元素
110     {
111         if (a[i] == 7)//查询
112         {
113             flag = 1;
114             a[i] = 9;
115             break;
116         }
117     }
118 
119     for (i = 0;i < length;i++)
120     {
121         printf("%d\n", a[i]);
122     }
123 
124     system("pause");
125 }

 

以上是关于链表与数组的比较的主要内容,如果未能解决你的问题,请参考以下文章

(数据结构)顺序表与链表的基本操作代码以及比较

使用向量类实现堆栈的链表与动态数组

树:链表与数组(效率)

链表06-开发可用链表(根据索引取得数据)

用于实现堆栈的链表与动态数组

浅谈单链表与双链表的区别