1.定义
一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据)
程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,并在此基础上实现某个特定的功能的操作;
程序 = 数据结构 + 算法
2.数据与数据之间的关
逻辑关系和物理结构
(1)数据的逻辑结构:数据元素与元素之间的关系
集合:关系平等
*线性结构:元素之间一对一的关系(数组,链表,队列,栈)
树型结构:元素之间一对多的关系(二叉树)
图形结构:元素之间多对多的关系(网状结构)
(2)数据的物理结构:数据的逻辑结构在计算机内存中的存储形式
*顺序存储:采用一段连续的内存空间保存元素
优点:空间连续,访问方便
缺点:插入删除需要移动大量的元素
需要预分配内存空间
容易造成存储空间碎片
*链式存储:采用一组非连续的内存空间保存元素
缺点:访问元素效率低
优点:插入和删除数据方便
不需要预分配内存
索引存储:通过关键字构建索引表,通过索引表来来找到数据的存储位置
散列存储(哈希存储):将数据元素的存储位置与关键码之间建立确定对
应关系从而实现查找的存储方式
快速查找。
3.单向链表 结点:数据域+指针域
(1)有头链表:第一个结点不保存有效数据
(2)无头链表:有效数据从第一个结点开始
API:应用程序接口
1.创建链表
Link* Link_creat()
{
Link *phead=malloc(sizeof(Link));
if (phead==NULL)
{
printf("fail creat\n");
return NULL;
}
phead->pnext = NULL;
return phead;
}
2.插入数据(头插,尾插)
int insert_head_Link(Link*phead,link_code code)
{
Link *pc=malloc(sizeof(Link));
if (phead==NULL)
{
printf("fail creat\n");
return -1;
}
pc->data = code;
pc->pnext = phead -> pnext;
phead -> pnext = pc;
return 0;
}
int insert_end_Link(Link*phead,link_code a)
{
Link *p = phead->pnext;
while(p->pnext!=NULL)
{
p = p -> pnext;
}
Link *pc=malloc(sizeof(Link));
if (phead==NULL)
{
printf("fail creat\n");
return -1;
}
pc->data = a;
pc->pnext = NULL;
p->pnext =pc;
return 0;
}
3.删除数据 (头删,尾删)
4.查找
Link* Find_link(Link*phead,link_code n)
{
Link *p=phead->pnext;
while(p!=NULL&&p->data!=n)
{
p = p->pnext;
}
if(p->data==n)
{
return p;
}
else
{
return NULL;
}
}
5.修改
int change_link(Link*phead, Link_code old, Link_code newdata)
{
Link *pnode = Find_link(phead, old);
if (NULL != pnode)
{
pnode->data = newdata;
return 0;
}
return -1;
}
6.销毁链表