线性表相关读书笔记

原创 2016年09月03日 09:05:55

在单链表中,假设每个节点的类型用LinkList表示,它应包括存储元素的数据域,这里用data表示,其类型用通用类型标识符ElemeType表示,还包括存储直接后继节点位置的指针域,这里用next表示。
LinkList类型的定义如下:

typedef struct LNode    //定义单链表节点类型
{
    ElemeType data;    //数据域
    struct LNode *next;//指向直接后继节点   
}LinkList;

对于双链表,采用类似的定义

typedef struct DNode    //定义单链表节点类型
{
    ElemeType data;    //数据域
    struct DNode *prior;//指向直接前驱节点  
    struct DNode *next;//指向直接后继节点   
}DLinkList;

两种方式建立单链表

  • 头插法建表
    该方法从一个空表开始,读取字符数组a中的字符,生成新节点,将读取的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,知道字符数组a的所有元素读取完为止。
    代码如下
void CreatListF(LinkList *L,ElemType a[],int n){
    LinkList *s; int i;
    L = (LinkList *)malloc(sizeof(LinkList));//创建头结点
    L->next = NULL;
        for (i = 0;i<n;i++){
        s = (LinkList *)malloc(sizeof(LinkList));
        s->data = a[i];
        s->next = L->next;//将s插在原开始节点之前,头结点之后。
        L->next =s;
}
}
算法时间复杂度为O(n)。
**注:**头插法生成的链表中结点的次序和原数组元素的顺序相反。
  • 尾插法建表
    将新节点查到当前链表的表尾上,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点。
void CreatListR(LinkList *L,ElemType a[],int n){
    LinkList *s,r; int i;
    L = (LinkList *)malloc(sizeof(LinkList));//创建头结点
    r = L;
        for (i = 0;i<n;i++){
        s = (LinkList *)malloc(sizeof(LinkList));
        s->data = a[i];
        r->next = s;
        r= s;
}
    r->next= NULL;
}
算法的时间复杂度为O(n);
  • 链表习题

练习一:
有一个带头结点的单链表L= {a1,b1,a2,b2,…,an,bn},设计一个算法将其拆分成两个带头结点的单链表L1和L2,L1={a1,a2,…an},L2 ={bn,bn-1,…,b1}。要求L1使用L的头结点。
解法:利用原单链表L中的所有结点,采用尾插法建立单链表L1,采用头插法建立单链表L2。
代码如下:

void split(LickList *L,LickList *L1, LickList *L2){
    LickList *p = L->next,*q,*r1;
    L1 = L;
    r1 = L1;
    L2 = (LickList *)malloc(sizeof(LickList));//创建L2的头结点
    L2->next = NULL;
    while(p !=NULL){
    q = p->next;
    r1->next = p;  //尾插法将P插入L1中
    r1 =p ;
    p = q->next;  
    q->next = L2->next;  //头插发将q插入L2中
    L2->next = q;
}
r1->next = NULL;
}

练习二:
有一个带头节点的单链表L,设计一个算法使其元素递增有序排列。
解法:若元单链表中有一个或以上的数据节点,先构造只含一个数据节点的有序表(只含一个数据节点的单链表一定是有序表)。扫描原单链表余下的节点 *p(知道p==NULL),在有序表中通过比较插入(直接插入法)。
代码如下:

void sort(LinkList *L){
    LinkList *p = L->next,*q,*r;
    if(p!=NULL){
    r = p->next;
    p ->next = NULL;      //构造只含一个数据节点的有序表
    p = r;
    while(p!=NULL){
    r = p->next;
    q = L;
    while(q ->next !=NULL &&q->next-data < p->data)
    q = q ->next;
    p ->next = q->next;
    q->next = p;
    p = r;
}
}
}

持续更新相关题库······

版权声明:本文为博主原创文章,未经博主允许不得转载。

线性表链式存储实现各种操作

线性表的实现分为顺序存储实现和链式存储实现,本文将主要讲述链式存储,线性存储将在下一篇讲述。通过链式存储实现对线性表的各项操作,包括初始化、创建、获取特定位置上的元素、获取线性表长度、插入、删除、定位...
  • wosuodeshijie
  • wosuodeshijie
  • 2015年07月29日 20:36
  • 1065

顺序存储结构线性表基本操作 纯C语言实现

自己把顺序表用C语言写了出来,并小试牛刀,做了一题,将La与Lb合并。 #include #include #define TRUE 1 #define FALSE 0 #define O...
  • D_Fur
  • D_Fur
  • 2012年08月03日 13:56
  • 10393

线性表的建立以及基本操作

#include #include #define MaxSize 50 typedef char ElemType; typedef struct { ElemType elem[Ma...
  • ciganxian
  • ciganxian
  • 2014年05月29日 17:17
  • 3652

严蔚敏版《数据结构》第二章线性表的算法C语言实现

首先,今天是中秋,明天是国庆,在这说声节日快乐啊。 说点题外话,今天出去走了走,看到药店就进去称体重了。尼玛,竟然轻了4斤,本来就是100刚出头,现在倒好,直接掉下100了。我想这可能是因为最近天天...
  • ruralboy1
  • ruralboy1
  • 2012年09月30日 13:22
  • 6167

线性表链式存储结构的c语言实现

线性表链式存储结构的c语言实现的操作
  • wxwd1
  • wxwd1
  • 2014年05月13日 13:54
  • 2397

数据结构-线性表-顺序存储结构完整可执行代码

数据结构-线性表-顺序存储结构完整可执行代码(c语言描述)   #include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #d...
  • hitwhylz
  • hitwhylz
  • 2013年10月05日 13:06
  • 4953

线性表顺序存储-使用c语言实现

/*线性表功能的实现*/ #include//定义常量 存储空间的初始化分配 #define MAXSIZE 20 #define TRUE 1 #define ERROR -1 #define FA...
  • u010187139
  • u010187139
  • 2015年06月27日 11:24
  • 3075

数据结构与算法-线性表顺序存储结构插入操作的实现

今天来说说线性表的实现 这里以List作为例子   package com.ray.testobject; public class List { private int length; pri...
  • raylee2007
  • raylee2007
  • 2015年07月30日 23:16
  • 1579

实验一:线性表的基本操作

实验一:线性表的基本操作 一、实验目的:   1、熟悉Java 上机环境,掌握Java语言编程方法,熟练运用Java语言实现数据结构设计和算法设计。 2、掌握线性表的顺序存储结构和链式存储结构...
  • qq_32902693
  • qq_32902693
  • 2016年03月30日 15:00
  • 903

学会学习 读书笔记

从小学到大学之前,一直都是学习课本知识,并没有多少自主学习的意识,到了大学和研究生之后,虽然自己也有主动去学习,但是一直觉得收获并不是那么大,没有明确的目标,多多少少也看过一些书,但是仅仅局限于看过,...
  • wendy_fly
  • wendy_fly
  • 2016年06月10日 11:51
  • 667
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性表相关读书笔记
举报原因:
原因补充:

(最多只允许输入30个字)