首页 > 编程知识 正文

数组和链表在存储中结构有什么不同,数据结构中数组和链表的区别

时间:2023-05-06 14:32:10 阅读:182065 作者:35

数据存储在内存中,内存中只有两种组织形式。

衡量算法是否优秀:

时间复杂度(费时)空间复杂度)内存消耗) 1、数组管理int a[100]; //向内存申请100个连续的压缩(int )空间int * p=(int * ) malloc ) 100压缩(int ) )。 //在堆空间中申请100个连续的int空间访问空间:获得第10个成员时,a[9],o[1]的成员访问时间(其中o[1]表示时间的复杂性,与变量无关,表示一定的时间)。

要在这100个空格中插入/删除一个数字,必须将后面的所有成员向后移动/向前移动。 因此,数组不会添加或删除成员。 最大的优点是可以利用数组下标的优势一次性访问某个成员。

2、在数组应用中,在1~127范围内的一定个数的二进制码中,首次出现低位至1的比特编号。

例如——0000011—— bit 04——00000100—— bit 2

是比较简单的方法。 data0x01==1时,找到了该位编号。 否则,循环检查最多会检测到8次data1,但无法固定获得此值的具体时间。 如果您自由输入a [ 127 ]={ 0,1,0,2,0,1,0,3 . } 1到127之间的数n,则直接结果为a[n]。 这样可以在规定的时间内获得预期的结果。 缺点是事先构建表,占用内存空间。 3、增加链表操作和删除链表节点

# include stdio.h # include stdlib.htypedefstructlinklist { int data; //字符、结构、指针等struct linklist *next; //指向下一个链表的指针,单链表}linknode,*linklistp; //头部使用linkslitpinsert _ head (link list phead,linklistp newnode ) { newnode-next=head; 头=新节点; 返回头; //末尾为linklistpinsert _ tail (link list phead,linklistp newnode ) if ) head==null ) { newnode-next=NULL; 头=新节点; } else { linklistp temp=head; wile(temp-next!=null}{temp=temp-next; } temp-next=newnode; newnode-next=NULL; }返回头; //在中间的某个地方放置linklistpinsert _ local (link list phead,linklistp newnode,int data ) ) { linklistp temp=head; if(temp==null )返回null; if(data==temp-data ) { newnode-next=head; 头=新节点; 返回头; } linklistp prev=head; temp=head-next; wile (时间!=空数据!=temp-data(prev=temp; temp=temp-next; if(temp==null )返回null; } prev-next=newnode; newnode-next=temp; 返回头; //链表中的节点linklistpdelnode(linklistphead,int data ) {linklistp temp=head; if(temp==null )返回null; if(temp-data==data ) {head=head-next; free(temp ); 返回头; }linklistp prev=head; temp=head-next; wile (时间!=空temp-data!=data}{prev=temp; temp=temp-next; }if(temp==null )返回null; prev-next=temp-next; free(temp ); 返回头; //输出函数voidoutput(linklistphead ) { linklistp temp=head; wile(temp ) ) printf('%d ',temp-data ); temp=temp-next; }printf((n ); }int main () { linklistp head=NULL; inta [ 10 ]={ 0,1,2,3,4,5,6,7,8,9 }; for(intI=0; i10; I ) linklistpnewnode=(linklistp ) malloc ) sizeof ) linknode ); newnode-data=a[i]; //分别在头部尾部添加head=insert_tail(head,newnode ); //head=insert_head(head,newnode; output (头; //getchar (; //为了调试而查看(//在链表中的某个位置插入int data的linklistpnewnode2=(linklistp ) malloc ) sizeof ) linknode ); newnode2-data=66; 打印(plsinputneedinsertdata : ); canf_s('%d ',data ); link list presult1=insert _ local (head,newnode2,data ); 结果1==空(if )默认错误状态节点(printf ); else output (结果1; //删除链表中的节点printf () plsinputneeddeldata: ); canf_s('%d ',data ); linklistpresult2=delnode(head,data ); 结果2==空(if )默认错误状态节点(printf ); else output (结果2; () ) ) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。