数据结构与算法设计#1线性表

本文详细介绍了线性表的抽象数据类型,包括数据元素和顺序、链式存储结构的特点。对于顺序存储,强调了逻辑顺序与物理顺序的一致性和相邻元素无空隙的特性。而在链式存储部分,重点讲解了单链表的节点定义、动态分配与释放,以及创建、查找、插入、删除等基本操作。此外,还涵盖了有序单链表的合并和双向链表的概念。
摘要由CSDN通过智能技术生成

线性表的定义

表ADT     

(1)数据元素:单值元素、记录型元素     

(2)唯一直接前驱、直接后继。是否按关键字有序排列     

(3)操作:生成、清除、查找、插入、删除、排序等

线性表的顺序存储

1. 线性表的顺序存储结构:把线性表的结点一次存储在一组地址连续的存储单元中。

2. 线性表的特点:

(1)线性表的逻辑顺序与物理存储顺序一致

(2)相邻元素之间无空隙

(3)已知基地址可以计算任意元素地址

 线性表的链式表示和实现

 单链表

 

结点的描述 

typedef struct Lnode
{
  ElemType data;//数据域、保存结点的值
  struct Lnode *next;//指针域
}Lnode;//结点类型

 结点的实现

结点是通过动态分配和释放来的实现,即需要时分配,不需要时释放。实现时是分别使用C语言提供的标准函数:malloc() ,realloc(),sizeof() ,free() 

单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名

动态分配:  p=(LNode*)malloc(sizeof(LNode));

函数malloc分配了一个类型为LNode的结点变量的空间,并将其首地址放入指针变量p中。

动态释放  free(p) ;

 系统回收由指针变量p所指向的内存区。P必须是最近一次调用malloc函数时的返回值。

常用的基本操作及其示意图

单链表

 

 线性表的基本操作

/*创建单线性链表*/


//头插入法创建单链表,链表的头结点head作为返回值
Lnode *create_LinkList(void)
{
  int data;
  Lnode *head,*p;
  head =(Lnode *)malloc(sizeof(Lnode));
  head->next=NULL;
 //创建链表的头结点head
while (1)
{
  scanf("%d",&data);
  if (data==32767) break;
  p=(Lnode *)malloc(sizeof(Lnode));
  p->data=data;
//数据域赋值
  p->next=head->next;
  head->next=p;
//新创建的结点总是作为第一个结点
}
return (head);
} 

 (2)单链表的查找

按序号

 按值

 

 (3)单链表的插入

 (4)单链表的删除

 (5)有序单链表的合并

 双向链表

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值