c语言-C语言写通讯录用数组好还是链表好?

问题描述

C语言写通讯录用数组好还是链表好?

C语言写通讯录,需要每次打开有数据,需要保存数据,删除,添加,修改.....
用链表是不是还要每次打开后读取文件数据到链表中,感觉太麻烦,到底用数组好还是链表更合适?如果用链表,如何实现链表数据的保存和读取?

解决方案

二者都属于一种数据结构
从逻辑结构来看
1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。
2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素
从内存存储来看
1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小
2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦

从上面的比较可以看出,如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了

希望能够帮到你。

解决方案二:

数组是定长的,因此实现简单,效率高,但是从中间删除元素,以及延展它的长度都需要额外的操作和代码。
链表插入、删除比较简单,效率低,如果你不使用库中的链表,作为学生习作,首先你得实现一个链表,需要额外的代码。
作为初学者,建议你两者都学习下,因为程序不是你的目的(这种程序完全不用自己写,如果你只是为了用的话),通过程序学习才是你的目的。
如果不会,可以google相关的例子。

时间: 2024-10-01 20:55:36

c语言-C语言写通讯录用数组好还是链表好?的相关文章

c语言-C语言数组作为参数传入子函数

问题描述 C语言数组作为参数传入子函数 对不起,可能我没表达清楚,我想问,数组作为参数传入子函数为什么不是作为形式参数传入,请你看程序运行结果,如果数组作为形式参数传入子函数,那么形式参数的值并不会影响原来main函数中的值,但是实际上,main函数中数组原来的值已经被修改了,这是因为数组传入的是地址(指针),我的问题就在这里,传入的是指针为什么不是用完就扔的形式参数. 这与c语言的设计有关是吗?内部有什么机制吗? 解决方案 首先提一下std C 调用约定,参数的传递使用栈. 在传递时首先将参数

《PIC微控制器项目设计:C语言》一2.2 数组

2.2 数组 本文讲的是PIC微控制器项目设计:C语言一2.2 数组,数组是通过指定其类型.名称和存储的元素数量进行声明的.例如: 创建了一个无符号基本整型数组,名称为Total,有5个元素.数组的第一个元素索引为0.因此,在上面的例子中,Total[0]指的是它的第一个元素.数组Total存储在存储器的5个连续位置中,如下表所示. 可以通过指定数组名称和索引将数据存储在数组中.例如,为了将25存储到数组的第二个元素中,我们必须写: 同样,可以通过指定数组名称和它的索引对数组中的内容进行读取.例

c语言中向二维字符数组中写入符号*

问题描述 c语言中向二维字符数组中写入符号* 声明一个二维字符数组char str[][]: 通过循环嵌套向里面写入符号 * 怎么实现?求前辈指教. 解决方案 for (int i = 0; i < 100; i++) { arr[i / 10][u % 10] = ' '; } for (i =0; i < 10; i++) { arr[3][i] = '*'; arr[4][i] = '*'; arr[i][3] = '*'; arr[i][4] = '*'; } 解决方案二: 只要一行

c语言-C语言typedef问题与结构体数组问题

问题描述 C语言typedef问题与结构体数组问题 typedef struct students{ long code; char *name; float score[3]; float sum;}cla[40];这样定义是什么意思呢?cla代替了struct students?正确的写法是怎么样的 解决方案 定义了一个班级类型,它代表40个学生,cla代替了students[40]以后可以定义变量cla cla1;cla1就是一个40个students组成的数组 语法上没问题,不过个人觉得

c语言-C语言在函数中调用指数组的问题

问题描述 C语言在函数中调用指数组的问题 #include <stdio.h> int i=5; void output_array ( int array[] ){ int a; for ( a=0; a<i; a++ ){ printf ( "%i%s", &array[a], "t" ); //warning: format specifies type 'int' but the argument has type 'int *'

指针-【C语言】为什么指向char整数数组的char*相减得到的是long类型?

问题描述 [C语言]为什么指向char整数数组的char*相减得到的是long类型? 解决方案 事实上, char *p,*p1都是指针,一个指向数组第一个元素,一个指向第五个元素,指针的减法表示地址之间的差,而这是指向char的指针,因此得到的是两地址差/8的值,即sizeof() 解决方案二: 你测试一个问题的时候 把结果贴出来 方便解决 解决方案三: 指针运算得出的结果与指针指向的类型和系统位数有关.比如上述例子:p和p1指针指向的都是char,那么指针运算的单位是一个字节长度. 根据上述

c语言 内存问题-c语言新手,写了个简单程序,没问题啊,怎么就出现这种问题呢,求问

问题描述 c语言新手,写了个简单程序,没问题啊,怎么就出现这种问题呢,求问 1C 这是程序 这是输入的数据,3个人名 这是出现的异常,不懂是为什么啊?有人给说说吗 解决方案 看着像是访问变量出问题了,你怎么不放代码放截图怎么看的清.最好放代码别人好调试 解决方案二: 楼主这种要存好几个字符串的,要么用二维数组,要么用指针数组 #include<iostream>using namespace std;void main() { int i; char *name[4]; //创建指针数组,含有

c语言-C语言调用abc(b,8);后数组元素为何没有改变

问题描述 C语言调用abc(b,8);后数组元素为何没有改变 #include "stdio.h" void abc(int a[],int n) { int i,t; for(i=0;i<n;i++) { t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; } } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; abc(b,8); // for(i=0;i<10;i++) // printf(&

C语言学习教程第四章-数组(8)

在二维数组a中选出各行最大的元素组成一个一维数组b. a=3 16 87 65 4 32 11 108 10 25 12 37b=(87 108 37) 本题的编程思路是,在数组A的每一行中寻找最大的元素,找到之后把该值赋予数组B相应的元素即可.程序如下:main(){static int a[][4]={3,16,87,65,4,32,11,108,10,25,12,27};int b[3],i,j,l;for(i=0;i<=2;i++){ l=a[i][0];for(j=1;j<=3;j+