链表与数组的比较
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 }
以上是关于链表与数组的比较的主要内容,如果未能解决你的问题,请参考以下文章