数据结构第二章.docVIP

  • 2
  • 0
  • 约1.01万字
  • 约 13页
  • 2019-10-21 发布于山西
  • 举报
13 - 第二章 线性表 2.1 线性表的概念及运算 线 性 表:线性表是n个数据元素a1,a2,…an的有限序列。n为表的长度,当n=0时称为空表,n=0时记作: (a1,a2,……an) 例 如:(A,B,……Z) (2,3,4,……10,J,Q,K,A) 一组学生记录 运 算:(1)置空表 (2)求长度 (3)取结点 (4)定位 (5)插入 (6)删除 2.2 线性表的顺序存储 顺 序 表:把结点按照逻辑次序存放在一组地址连续的存储单元里。是一种随机存储结构。 显 然:LOC(ai)=LOC(a1)+(i-1)*l 自 然:typedef struct { datatype data[maxsize]; int last; }sequenlist; sequenlist *L; 或 者:定义一个数组+一个整型表长 顺序表上的基本运算: (1)插入运算 (a1,a2,…,ai,…an) (a1,a2,…,x,ai,…an) 算 法:for(j=n;j=i;j--) a[j+1]=a[j]; a[j+1]=x; 算法分析: E=(n+n-1+…+1)/(n+1)=n(n+1)/2(n+1)=n/2 T(n)=O(n) (2)删除运算 (a1,a2,…,ai,…an) (a1,a2,…,ai-1,ai+1,…an) 算 法:for(j=i+1;j=n;j++) a[j-1]=a[j]; 算法分析: E=(n-1+n-2…+1)/n=n(n-1)/2n=(n-1)/2 T(n)=O(n) 2.3 线性表的链式存储 1.单链表:由若干个数据结点按照逻辑次序用指针连接起来。 head- a1 | - a2 | - a3 |- …… an | 0 头指针: head(唯一确定一个链表) 尾指针: NULL(常量0,尾结点标志) 结点定义: data next d1 d2 … dn next typedef int datatype; typedef struct node { datatype data; struct node *next; }linklist; linklist *head,*p; 结点生成:p=malloc(sizeof(linklist)); //p=new linklist; free(p) //delete(p); 结点访问:(*p).data (*p).next p-data p-next 2. 单链表上的基本运算 建立单链表: (1)头插法建表 linklist *creatlistf() { char ch; linklist *head,*s; head=NULL; ch=getchar(); while(ch!=$) { s=malloc(sizeof(linklist)); s-data=ch; s-next=head; head=s; ch=getchar(); } return head; } 核心代码:s-next=head; head=s; 算法分析:T(n)=O(n) (2)尾插法建表 linklist *creatlistr() { char ch; linklist *head,*s,*r; head=NULL; r=NULL; ch=getchar(); while(ch!=$) { s=malloc(sizeof(linklist)); s-data=ch; if (head==NULL) head=s; else r-next=s; r=s; ch=getchar(); } if (r!=NULL) r-next=NULL; return head; } 核心代码:r-next=s; r=s; 算法分析:T(n)=O(n) (3)尾插法建表(带头结点) 在链表中引入头结点的主要

文档评论(0)

1亿VIP精品文档

相关文档