线性表的基本概念学习

定义:

线性表是由n(n>=0)个结点组成的有限序列,通常表示成(a1,a2,…,an),满足以下特征。

特征:
  • 线性表中每个结点至多只有一个前驱结点且至多只有一个后继结点
  • 起始结点没有前驱结点
  • 终结结点没有后继结点
基本运算:
  1. 初始化线性表
  2. 求线性表的长度
  3. 求线性表的第i个元素
  4. 按值查找元素,返回元素序号
  5. 插入元素
  6. 删除元素
  7. 输出列表

存储结构

1.顺序存储结构
 /*顺序表的容量*/
#define MAXSIZE 100
typedef char ElemType;
typedef struct
{
     /*存放顺序表的元素*/
    ElemType data[MAXSIZE];
      /*顺序表的实际长度*/
    int length;              
} SqList;
2.链式存储结构
  • 单链表
typedef char ElemType;
typedef struct node 
{     
    ElemType data;     /*数据域*/
    struct node *next; /*指针域*/
} SLink;
  • 双链表
typedef char ElemType;
typedef struct node
{    
    ElemType data;                /*数据域*/
    struct node *prior,*next;  /*分别指向前驱结点和后继结点的指针*/
} DLink;

顺序表的定义:

#include <stdio.h>
#define MAXSIZE 100 /*顺序表的容量*/
typedef char ElemType;
typedef struct
{
    ElemType data[MAXSIZE]; /*存放顺序表的元素*/
    int length;                /*顺序表的实际长度*/
} SqList;
一、初始化
void InitList(SqList &sq) /*初始化线性表*/
{
    sq.length = 0;
}
二、线性表长度:
int GetLength(SqList sq) /*求线性表长度*/
{
    return sq.length;
}
三、求第 i 个元素:
int GetElem(SqList sq, int i, ElemType &e) /*求线性表中第i个元素*/
{
    if (i < 1 || i > sq.length) /*无效的i值*/
        return 0;
    else
    {
        e = sq.data[i - 1];
        return 1;
    }
}
四、按值查找:
int Locate(SqList sq, ElemType x) /*按值查找*/
{
    int i = 0;
    while (sq.data[i] != x) /*查找值为x的第1个结点*/
        i++;
    if (i > sq.length)
        return (0); /*未找到*/
    else
        return (i + 1);
}
五、插入元素:
int InsElem(SqList &sq, ElemType x, int i) /*插入元素*/
{
    int j;
    if (i < 1 || i > sq.length + 1) /*无效的参数i*/
        return 0;
    for (j = sq.length; j > i; j--) /*将位置为i的结点及之后的结点后移*/
        sq.data[j] = sq.data[j - 1];
    sq.data[i - 1] = x; /*在位置i处放入x*/
    sq.length++;        /*线性表长度增1*/
    return 1;
}
六、删除元素:
int DelElem(SqList &sq, int i) /*删除元素*/
{
    int j;
    if (i < 1 || i > sq.length) /*无效的参数i*/
        return 0;
    for (j = i; j < sq.length; j++) /*将位置为i的结点之后的结点前移*/
        sq.data[j - 1] = sq.data[j];
    sq.length--; /*线性表长度减1*/
    return 1;
}
七、输出线性表:
void DispList(SqList sq) /*输出线性表*/
{
    int i;
    for (i = 1; i <= sq.length; i++)
        printf("%c ", sq.data[i - 1]);
    printf("\n");
}
Main:
int main()
{
    int i;
    ElemType e;
    SqList sq;
    InitList(sq);         /*初始化顺序表sq*/
    InsElem(sq, 'a', 1); /*插入元素*/
    InsElem(sq, 'c', 2);
    InsElem(sq, 'a', 3);
    InsElem(sq, 'e', 4);
    InsElem(sq, 'd', 5);
    InsElem(sq, 'b', 6);
    printf("线性表:");
    DispList(sq);
    printf("长度:%d\n", GetLength(sq));
    i = 3;
    GetElem(sq, i, e);
    printf("第%d个元素:%c\n", i, e);
    e = 'a';
    printf("元素%c是第%d个元素\n", e, Locate(sq, e));
    i = 4;
    printf("删除第%d个元素\n", i);
    DelElem(sq, i);
    printf("线性表:");
    DispList(sq);
    return 0;
}
posted @ 2020-05-12 21:50  予之路  阅读(186)  评论(0编辑  收藏  举报