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