• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

XiaoXiaoli

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

数据结构(西北大学)_线性表

第一部分 数据结构的基本概念

第二部分 基本的数据结构,包括 线性结构-线性表、栈和队列、串、数组和广义表。非线性结构-树和图。

第三部分 基本的数据处理技术 包括查找技术与排序技术

第一部分介绍了数据结构的基本概念。接着进入到第二部分介绍线性结构。

第二章 线性表

1介绍线性表的抽象数据类型定义。

2给出顺序存储结构与链式存储结构。

3介绍在相应的存储结构上实现的线性运算。

线性表通过5个问题来介绍:

1线性表的概念及抽象数据类型定义

2线性表的顺序存储

3线性表的链式存储

4一元多项式的表示及相加

5顺序表与链式表的综合比较

线性表的定义:线性表是n个类型相同的数据元素的有限序列。对于n>0,除了第一个元素无直接前驱,最后一个元素无直接后继,其余的每个元素都只有一个直接前驱和直接后继。

线性表的特点:数据元素的非空有限序列中,存在唯一的首元素和唯一的尾元素,首元素无直接前驱,尾元素无直接后继,其他每个数据元素均有直接的前驱和直接的后继。

1介绍线性表的抽象数据类型定义。

ADT LinearList{

数据元素:D={ai| ai∈D0,i=1,2,3...,n n>=0,D0为某一数据对象}

结构关系:S={<ai,ai+1>| ai,ai+1∈DO,i=1,2,...,n-1}

基本操作(运算集合):

  (1)InitList(L)

      操作前提:L为未初始化线性表。

      操作结果:将L初始化为空表。

  (2)DestroyList(L)

      操作前提:线性表L已经存在。

      操作结果:将L销毁。

  (3)ClearList(L)

       操作前提:线性表L已经存在。

      操作结果:将表L置为空表。

  (4)EmptyList(L)

      操作前提:线性表L已经存在。

      操作结果:如果L为空表则返回真,否则为假。

  (5)ListLength(L)

      操作前提:线性表L已经存在。

      操作结果:如果L为空表则返回0,否则返回表中元素个数。

  (6)Localte(L,e)

       操作前提:线性表L已经存在,e为合法元素值。

      操作结果:如果L中存在e,则较“当前指针”指向元素e所在位置并返回真,否则返回假。

  (7)GetData(L,i)

      操作前提:线性表L已经存在,且i值合法,即1<=i<=Listlength(L)。

      操作结果:返回线性表L中第i个元素的值。

  (8)insList(L,i,e) 

      操作前提:线性表L已经存在,e为合法元素且1<=i<=Listlength(L)+1。

      操作结果:在L中第i个位置插入新的数据元素e,L的长度加1。

  (9)DelList(L,i,&e)

       操作前提:线性表L已经存在且非空,1<=i<=Listlength(L)。

      操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。

 }ADT LinearList

2线性表的顺序存储

顺序存放,就是地址连续的内存单元。

假设线性表中有n个元素,每个元素占k个单位,第一个元素的地址为loc(a1),则可通过如下公式计算出第i个元素的地址Loc(ai):  loc(ai)=loc(a1)+(i-1)✖k,其中loc(a1)称为基地址。

顺序存储结构的C语言定义

#define MAXSIZE 100
typedef struct{
  ElemType elem[MAXSIZE]; //ElemType元素类型,MAXSIZE定义数据有多少。
  int last        //表尾指示器,指向实际存储元素。
} SeqList;
注意区分元素的序号和数组的下标,如a1的序号为1,其对于的数组下标为0.

 3线性表顺序存储结构的基本运算

线性表的基本运算

查找操作

插入操作

删除操作

顺序表合并算法

查找操作

/*线性表的两种基本查找运算
1 按序号查找GetData(L,i):要求查找线性表L中第i个数据元素,其结果是L.elem[i-1]或L->elem[i-1]
2 按内容找Locate(L,e):要求查找线性表L中与给定值e相等的数据元素,其结果是:若在表L中找到与e相等的元素,则返回该元素在表中的序号,如找不到,则返回一个“空序号”,如-1.
*/
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100

typedef int ElemType;

typedef struct {
    ElemType elem[MAXSIZE]; //ElemType元素类型,MAXSIZE定义数据有多少。
    int last;        //表尾指示器,指向实际存储元素。
} SeqList;

//在顺序表L中依次存放着线性表中的元素,在表中查找与e相等的元素。若L[i]=e则找到该元素,并返回i值,若找不到则返回-1
int Locate(SeqList L, ElemType e) { //L是具有类型的结构。
    int i = 0;
    
    i = 0;//i为扫描计数器,初始值为0.即从第一个元素开始比较。
    while ((i <= L.last) && (L.elem[i] != e)) { //(i <= L.last) 表示表还未找完。(L.elem[i] != e)表示还未找到元素。
        i++;
    }
    //顺序扫描表,直到找到值为key的元素,或扫描到表尾而没有找到。
    if (i <= L.last) {
        return (i + 1); //若找到值为e的元素,则返回其序号。
    }
    else {
        return -1;//若没有找到,则返回空序号。
    }
}

int main(void) {

    SeqList l;
    //l.elem = {5,7,88,99};
    l.elem[0] = 1;
    l.elem[2] = 5;
    l.elem[3] = 7;
    l.elem[4] = 88;
    l.elem[5] = 222;
    l.elem[6] = 21;
    l.last = 6;
    ElemType e = 5;
    if (Locate(l, e) == -1) {
        printf("no found data\n");
    }
    else {
        printf("find\n");
    }

    return 0;
}

 

posted on 2021-01-03 11:06  XiaoXiaoli  阅读(151)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3