(一)线性表结构1数组实现

(一)数组实现线性表

  1.定义集合(结构体实现)

1 #define MAX 10
2  typedef struct {
3       int DATA[MAX];
4       int last;
5 }LIST;

    DATA数组用于存放整型数据,last表示最后元素的下标

   2.定义各类操作

    a.创建空表

    

LIST *MakeEmpty() {
    LIST *PtrL;
    PtrL = (LIST *)malloc(sizeof(LIST));
    PtrL->last = -1;
    return PtrL;

}

 b.插入数据

void Insert(int x, LIST *ptrl, int i) {
    if (ptrl->last == MAX - 1) {
        printf("表满");
        return;
    }
    if (i<1 || i>ptrl->last + 2) {
        printf("位置不合法");
        return;
    }
    int j;
    for (j = ptrl->last; j >= i - 1; j--) {
        ptrl->DATA[j + 1] = ptrl->DATA[j + 1];
    }
    ptrl->DATA[i - 1] = x;
    ptrl->last++;
    return;
}

     c.查找

int Find(LIST *ptrl, int data) {
    int i = 0;
    while (i <= ptrl->last&&ptrl->DATA[i] != data)
        i++;
    if (i > ptrl->last)
        return -1;
    else
        return i;
}

    d.删除

void Delete(LIST *l, int i) {
    int j;
    if (i<1 || i>l->last + 1) {
        printf("不存在该位置!");
        return;
    }
    for (j = i; j <= l->last; j++) {
        l->DATA[j - 1] = l->DATA[j];
    }
    l->last--;
}

    e.打印(遍历)

void Print(LIST *l) {
    int i;
    for (i = 0; i <= l->last; i++)
        printf("%d ", l->DATA[i]);
}



完整实现

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define MAX 10
 4 typedef struct {
 5     int DATA[MAX];
 6     int last;
 7 }LIST;
 8
 9 LIST *MakeEmpty() {
10     LIST *PtrL;
11     PtrL = (LIST *)malloc(sizeof(LIST));
12     PtrL->last = -1;
13     return PtrL;
14
15 }
16
17 int Find(LIST *ptrl, int data) {
18     int i = 0;
19     while (i <= ptrl->last&&ptrl->DATA[i] != data)
20         i++;
21     if (i > ptrl->last)
22         return -1;
23     else
24         return i;
25 }
26
27 void Insert(int x, LIST *ptrl, int i) {
28     if (ptrl->last == MAX - 1) {
29         printf("表满");
30         return;
31     }
32     if (i<1 || i>ptrl->last + 2) {
33         printf("位置不合法");
34         return;
35     }
36     int j;
37     for (j = ptrl->last; j >= i - 1; j--) {
38         ptrl->DATA[j + 1] = ptrl->DATA[j + 1];
39     }
40     ptrl->DATA[i - 1] = x;
41     ptrl->last++;
42     return;
43 }
44
45 void Delete(LIST *l, int i) {
46     int j;
47     if (i<1 || i>l->last + 1) {
48         printf("不存在该位置!");
49         return;
50     }
51     for (j = i; j <= l->last; j++) {
52         l->DATA[j - 1] = l->DATA[j];
53     }
54     l->last--;
55 }
56
57 void Print(LIST *l) {
58     int i;
59     for (i = 0; i <= l->last; i++)
60         printf("%d ", l->DATA[i]);
61 }
时间: 2024-10-12 16:24:20

(一)线性表结构1数组实现的相关文章

线性表结构的Java实现

一.线性表的抽象数据类型表述 线性表的结构简单,长度允许动态增长或搜索:可以对线性表中的任何数据元素进行访问和查找:允许进行数据的插入和删除操作:求线性表中的指定数据的前驱和后继:合并线性表以及拆分线性表中. Java JDK中有ArrayList和LinkedList两个类很好的实现了顺序存储和链式存储.因此学习数据结构的最好方式是去研究JDK源码. 这里的代码个人作为练习,为了便于理解,很多地方处理的并非十分严谨,仅供参考.转载注明出处,技术讨论 email: <[email protect

线性表结构

定义:按照一定的逻辑顺序依次存放在计算机的这一组连续的存储单元. 以数组的方式存放数据,其中在插入或者删除节点元素是需要判断该节点的位置. class DATA{ String key; //结点的关键字 String name; int age;} class SLType //定义顺序表结构{ static final int MAXLEN=100; DATA[] ListData=new DATA[MAXLEN+1]; //保存顺序表的结构数组 int ListLen; //顺序表已存结点

java实现的链式线性表结构

package com.hephec.ds; public class LinkedList<T> { //定义一个内部类节点Node Node实例代表链表的节点 class Node{ //保存节点的数据 private T data; //保存下一个节点的引用 private Node next; //无参的构造方法 public Node(){ } //有参的构造方法 public Node(T data,Node next){ this.data=data; this.next=nex

常见的线性列表结构---【数组、链表、栈、队列、堆】

我们在算法设计当中最常见的线性结构列表无非是一下几种: 1.数组: 数组应该是我最常用的一种.他的存储地址是连续的,就是当我们新开辟一个数组时,我们会给他分配一个连续的地址.由于他的地址是连续的,所以在我们知道他下标的时候,查找元素的速度非常快. 2.链表: 链表中的元素的位置不固定,链表中的每一个结点都一个头指针与尾指针,通过这样把链表中的元素连接起来,所以查找一个元素的时间与该元素所处的位置有关系.但是他在空间上面占有优势. 3.栈: 栈中的元素有一个特点,就是保持" 先进先出"的

程序员修炼之路-(2)线性表(上):数组与链表

1 两块基石 数组与链表构成各种数据结构的基石,是实现所有数据结构必不可少的元素. 1.1 数组 数组一般内置于编程语言中,直接通过索引(index)读写.索引一般为数字,有的语言甚至直接支持如字符串等其他类型的索引.在很多数据结构中都能看到数组的身影,例如字符串.动态数组.堆.栈和队列(用链表也可以,但用数组实现很高效)等. 1.2 链表 概念上都能理解,但实现起来还真有很多容易出错的地方. 实现细节 ?  表头(header):为什么要添加一个表头?因为有了表头,在第一个结点前添加结点或删除

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

大话数据结构---顺序存储结构的线性表

线性表的定义:零个或多个数据元素的有限序列. 定义的解读: 首先是由一组数据元素组成,可以基本数据类型,也可以使自定义的类型, 有限的个数,当然可以是0个,也就是空表呗, 还有一个特点就是有序 这么一看线性表抽象出来就和生活中的排队一样,一群小朋友站成一队,每个人都知道自己站在第几个,自己的前面是谁,后面谁,除了排头排位的两个数据,每个数据都有唯一的前驱和后继. 线性表的分类 今天先学习一下顺序存储结构,顺序存储结构指的就是用一段地址连续的存储单元依次存储线性表的数据元素: 这么一看线性表挺像数

线性表之顺序存储结构实现(上)

一,线性表的概念以及数学定义 1.线性表的概念 零个或多个数据元素的有限序列.首先说明这是一个序列,也就是说数据元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且仅有一个前驱和后继. 2.数学定义 若将线性表记为(a1...ai-1,ai,ai+1....an),则线性表中,ai-1领先于ai,ai领先于ai+1,则称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素,当i=1,2....n-1的时候,ai有且仅有一个直接后继元素,当i=2,3

数据结构之线性表之顺序存储结构(3)

1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数据元素的有限序列. 如果用数学语言来进行定义: (声明:由于下标不是很好弄出来,所以只能表示下面这种方式了,请见谅!) 若线性表记作(a1,...ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i