数组与链表

Posted cccczqccc

tags:

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

链表和数组

数组的优点: 存取速度快   缺点:  1.需要连续很大的内存(数组创建的时候生成的内存地址是连续的)   2.插入和删除元素的效率很低

链表的优点:1.不需要连续很大的内存  2.插入和删除元素效率高(修改链(指针)就可以完成)     缺点:查找的时候效率低 (存储的时候排序)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   

1.用结构体创建 包括数据域和指针域

链表的创建:可以用一个函数来创建然后返回头指针。(用malloc申请动态内存(堆) 因为创建完了该函数结束会自动释放内存)

struct Node*create_list(void){
int len,i,val;      // 变量len是要创建节点个数         val用来存临时数据

struct Node *pHead=(struct Node*)malloc(sizeof(struct Node));
if(NULL==pHead){
printf("分配失败 ");
exit(-1);
}

struct Node*pTail=pHead;
pTail->pNext=NULL;
printf("请输入你要生成节点的个数: ");
scanf("%d",&len);

for(i=0;i<len;i++){
printf("请输入第%d个节点的数据:",i+1);
scanf("%d",&val);

struct Node*pNew=(struct Node*)malloc(sizeof(struct Node));
if(NULL==pNew){
printf("分配失败 ");
exit(-1);
}
pNew->data=val;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}
return pHead;
}

链表的遍历

void traverse_list(struct Node* pHead){
struct Node*p=pHead->pNext;
while(NULL!=p){
printf("%d ",p->data);
p=p->pNext;
}
return ;
}

链表的查找    (按序号查找)

struct Node* fine_list(struct Node* pHead,int k){
struct Node*p=pHead;
int i=0;
while(p!=NULL&&i<k){
p=p->pNext;
i++;
}
if(i==k) return p;
else return NULL;
}

链表的插入(1.把插入的指针指向要插入位置后面的指针 2.把要插入前面的指针指向插入的指针   顺序不能颠倒)和删除(类似改变指针连接关系   注意保存要删除的地址  不然会造成内存泄漏)

明天再写

19/12/21 00:30

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

在 C 中寻找数组(与链表)哈希表实现

数组与链表的区别?

数组与链表的区别?

数组与链表的应用—链表基础原理

数组与链表的优缺点

面试题:数组和顺序表链表的区别