zoukankan      html  css  js  c++  java
  • 线性表

    #include <stdio.h>
    
    #define false 0
    #define true 1
    #define MAXSIZE 20
    
    typedef int bool;
    typedef int ElementType;
    
    struct ListNode {
        ElementType Data[MAXSIZE];
        int length; // 线性表的长度
    };
    typedef struct ListNode List;
    typedef struct ListNode *PtrToList; // 后续函数传参, 传的就是指针
    
    PtrToList MakeEmpty (); // 创建空线性表
    bool Insert (PtrToList L, ElementType X, int Pos); // 插入
    void PrintNodes (PtrToList L); // 打印
    int Find (PtrToList L, ElementType X); // 查找
    bool Delete (PtrToList L, int Pos); // 删除
    
    int main () {
        PtrToList PtrDemo; // PtrDemo是指向结构体的指针变量
    
        PtrDemo = MakeEmpty(); // 创建空表
        /* 插入数据测试开始 */
        Insert(PtrDemo, 100, 0);
        Insert(PtrDemo, 10, 1);
        Insert(PtrDemo, 1, 2);
        Insert(PtrDemo, 21, 0);
        PrintNodes(PtrDemo); // 21      100     10      1
        /* 插入数据测试结束 */
    
        /* 查找测试开始 */
        int Pos; // 存放找到后元素的位置
        int X = 1; // 要查找的元素
        Pos = Find(PtrDemo, X);
        printf("要查找的元素是: %d
    ", X);
        printf("位置信息是: %d
    ", Pos);
    
        X = 200;
        Pos = Find(PtrDemo, X);
        printf("要查找的元素是: %d
    ", X);
        printf("位置信息是: %d
    ", Pos);
        /* 查找测试结束 */
    
        /* 删除测试开始 */
        printf("
    ");
        printf("当前线性表中的元素
    ");
        PrintNodes(PtrDemo);
        Delete(PtrDemo, PtrDemo->length - 1); // 删除最后一个元素
        printf("删除最后一个元素
    ");
        PrintNodes(PtrDemo);
        /* 删除测试结束 */
    
        return 0;
    }
    
    // 1. 初始化
    // 申请一个List需要的空间, 返回一个指向PtrToList的指针
    PtrToList MakeEmpty () {
        PtrToList L;
        L = (PtrToList)malloc(sizeof(List));
        L->length = 0;
        return L;
    }
    
    // 2. 插入
    // Pos的合法位置是 0 ~ L->Length
    // 例如 Pos=0, 则代表所有元素都向右移动一格, 把数组0下标空
    // 出来, 执行, L->Data[0] = X;
    // 成功返回true, 失败返回false
    bool Insert (PtrToList L, ElementType X, int Pos) {
        int i;
        if (L->length == MAXSIZE) {
            printf("表空间已满, 不能继续插入
    ");
            return false;
        }
        if (Pos < 0 || Pos > L->length) {
            // i的合法取值是 1 ~ L->length - 1
            printf("插入顺序不合法
    ");
            return false;
        }
        for (i=L->length; i>=Pos+1; i--) {
            L->Data[i] = L->Data[i-1];
        }
        L->Data[Pos] = X;
        L->length += 1;
        return true;
    }
    
    // 3. 打印输出
    void PrintNodes (PtrToList L) {
        int i;
        printf("线性表长度: %d
    ", L->length);
        printf("线性表数据如下:
    ");
        for (i=0; i<L->length; i++) {
            printf("%d	", L->Data[i]);
        }
        printf("
    ");
    }
    
    // 4. 查找
    // 给定元素值X, 查找其在线性表的位置
    // 找到返回位置下标, 找不到返回 -1
    int Find (PtrToList L, ElementType X) {
        int i;
        for (i=0; i<L->length; i++) {
            if (L->Data[i] == X) {
                return i;
            }
        }
        return -1;
    }
    
    // 5. 删除
    // 删除指定位置Pos的元素
    // Pos取值范围, [0, L->length-1]
    bool Delete (PtrToList L, int Pos) {
        int i;
        if (Pos < 0 || Pos > L->length - 1) {
            printf("删除位置错误
    ");
            return false;
        }
        for (i=Pos; i<=L->length; i++) {
            L->Data[i] = L->Data[i + 1];
        }
        L->length--;
        return true;
    }
    
    
  • 相关阅读:
    基于p2p聊天室的原理介绍.个人学习笔记
    一个可移植数据库操作组件的简单介绍
    常见任务
    sql常用语句
    认真写写SQLAlchemy
    Jenkins 安装与使用手册
    Ajax
    支持主流注册中心,SolarMesh发布新版本 SolarMesh
    API标准化对Dapr的重要性
    企业数字化转型,你知道有哪些关键要素吗?
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7603589.html
Copyright © 2011-2022 走看看