数据结构1

来源:互联网 发布:尤克里里教程软件 编辑:程序博客网 时间:2024/06/03 04:42

一 线性表:
线性表的定义
定义n个数据元素的有限序列,记作(a1, a2, …, an)ai 是表中数据元素,n 是表长度
线性表的特点
除第一个元素外,其他每一个元素有一个且仅有一个
直接前驱。
除最后一个元素外其他每一个元素有一个且仅有一个
直接后继。

二 顺序表:
顺序表的定义和特点
定义 将线性表中的元素相继存放在一个连续的存储空间中。
可利用一维数组描述存储结构
特点 线性表的顺序存储方式
遍历 顺序访问, 可以随机存取

三 链表:
链接表是线性表的链接存储表示
单链表
静态链表
循环链表
双向链表
typedef char ListData;

typedef struct node { //链表结点
ListData data; //结点数据域
struct node * link; //结点链域
} ListNode;

typedef ListNode * LinkList;

LinkList first; //链表头指针
单链表中的插入与删除:
插入 第一种情况:在第一个结点前插入 newnode->link = first
第二种情况:在链表中间插入
newnode->link = p->link;
p->link = newnode;
删除
第一种情况: 删除表中第一个元素
第二种情况: 删除表中或表尾元素
int Delete ( LinkList& first, int i )
{
//在链表中删除第 i 个结点
ListNode *p, *q;
if ( i == 1 ) //删除表中第 1 个结点
{
q = first; first = first->link;
} else {
p = first; int k = 0; //找第 i-1个结点
while ( p != NULL && k < i-1 )
{
p = p->link; k++;
}
if ( p == NULL || p->link == NULL )
{
printf ( “无效的删除位置!\n” );
return 0;
}
else
{ //删除表中或表尾元素
q = p->link; //重新链接
p->link = q->link;
}
}
free ( q ); //删除q
return 1;
}
带表头结点的单链表
表头结点位于表的最前端,本身不带数据,仅标志表头。
设置表头结点的目的是
统一空表与非空表的操作
简化链表操作的实现