zoukankan      html  css  js  c++  java
  • 顺序表的基本操作-完整代码和拆开分析

     1 #include<stdio.h>    //增+删+改+初始化+输出
     2 #include<stdlib.h>
     3 #define MaxSize 10   此数决定了后面插入数据的多少,超过该数字输出顺序表的时候不是正确的数
     4 typedef int ElementType;
     5 struct SqList {
     6     ElementType elem[MaxSize];
     7     int Length;
     8 };
     9 
    10 typedef struct  SqList *PtrNode;
    11 typedef PtrNode List;
    12 
    13 List InitList();
    14 int InSert(List L, int i, ElementType x) ;
    15 int Delete(List L, int i);
    16 int GetElem(List L, int i);
    17 int Print(List L);
    18 
    19 int main() {
    20     int a;
    21     ElementType x;
    22     List list;
    23     list=InitList();
    24     InSert(list, 1, 1);
    25     InSert(list, 2, 2);
    26     InSert(list, 3, 3);
    27     Print(list);
    28     printf("第一处的元素为:%d
    ",GetElem(list,1));
    29     printf("要删除第几处的数据");
    30     scanf("%d", &a);
    31     Delete(list, a);
    32     Print(list);
    33 }
    34 List InitList() {  //初始化
    35     List L;
    36     L = (List)malloc(sizeof(struct SqList));
    37     L->Length = 0;
    38     printf("初始化成功
    ");
    39     return L;
    40 }
    41 //插入
    42 int InSert(List L, int i, ElementType x) { 
    43     int j;   
    44     if (i<1 || i>L->Length + 1) {
    45         printf("越界"); return 0;
    46     }
    47     for (j = L->Length; j >= i; j--) {    
    48         L->elem[j] = L->elem[j-1];   L—>elem[j+1]=L->elem[j];是错误的,j是数组长度,用作数组索引时要小心,所以上面的条件不应该是j>i
    49 } 50 L->elem[i - 1] = x; //第i处,因为是数组所以减一 51 L->Length++; 52 return 1; 53 } 54 //删除 55 int Delete(List L, int i) { 56 int j; 57 if (i<1 || i>L->Length) { 58 printf("越界"); return 0; 59 } 60 for (j = i - 1; j < L->Length-1; j++) 61 L->elem[j] = L->elem[j+1]; 62 L->Length--; 63 return 1; 64 65 } 66 //查找第i处的数据 67 int GetElem(List L, int i) { 68 if (i<1 || i>L->Length) { 69 printf("越界"); return 0; 70 } 71 return L->elem[i - 1]; 72 } 73 //遍历输出 74 int Print(List L) { 75 int i = 0; 76 for (i; i < L->Length; i++) 77 printf("%d ", L->elem[i]); 78 }

    1. 初始化:

    1 List InitList() {  //初始化
    2      List L;
    3      L = (List)malloc(sizeof(struct SqList));
    4      L->Length = 0;
    5      printf("初始化成功
    ");
    6      return L;
    7  }

    (1)malloc开辟空间,L指向该空间

    (2)空间的Length属性赋值为零;

    2.插入:

    int InSert(List L, int i, ElementType x) { 
    43     int j;
    44     if (i<1 || i>L->Length + 1) {
    45         printf("越界"); return 0;
    46     }
    47     for (j = L->Length; j > i; j--) {
    48         L->elem[j + 1] = L->elem[j];
    49     }此处错误,修改见上面完整代码
    50     L->elem[i - 1] = x;  //第i处,因为是数组所以减一
    51     L->Length++;
    52     return 1;
    53 }

    (1)判断输入的待插入位置是否合理------要插入的位置是否小于1,或者大于顺序表的长度Length+1【与其他的不同:可以在Length+1位置插入】

    (2)如果不满足(1),则循环赋值------从顺序表最后一个位置开始,从后向前依次将前一个位置的值赋给后一个位置

    (3)插入待插入数x-------将x赋值给待插入位置

    (4)顺序表长度加一

    3.删除:

    int Delete(List L, int i) {
    56     int j;
    57     if (i<1 || i>L->Length) {
    58         printf("越界"); return 0;
    59     }
    60     for (j = i - 1; j < L->Length-1; j++)
    61         L->elem[j] = L->elem[j+1];
    62     L->Length--;
    63     return 1;
    64 
    65 }

    (1)判断输入的待插入位置是否合理------要插入的位置是否小于1,或者超出顺序表的长度Length

    (2)如果不满足(1),则循环赋值-------从待删除位置开始,从前向后依次将后一个位置的值赋值给前一个位置

    (3)顺序表长度减一

    4.查找:

    67 int GetElem(List L, int i) {
    68     if (i<1 || i>L->Length) {
    69         printf("越界"); return 0;
    70     }
    71     return L->elem[i - 1];
    72 }

    (1)判断输入的待插入位置是否合理------要插入的位置是否小于1,或者超出顺序表的长度Length

    (2)直接根据数组下标返回该值

    5.输出:

    74 int Print(List L) {
    75     int i = 0;
    76     for (i; i < L->Length; i++)
    77         printf("%d
    ", L->elem[i]);
    78 }

    根据数组下标直接循环输出

    **********************************************

    Tips:初始化和查找必须有返回值(初始化要将创建的顺序表名返回;查找要将找到的值返回),其他函数可以不设返回值或者返回1

  • 相关阅读:
    蓝牙的AVDTP协议笔记
    蓝牙的AVCTP协议笔记
    hosts学习整理
    Win10报错0x800f0906
    Git Bash的妙用
    将xml文件由格式化变为压缩字符串
    try-with-resource机制的一个编译陷阱
    Git回滚代码暴力法
    IDEA中Git分支未push的变更集如何合并到另一个分支
    日期类型存储成字符串类型的格式问题
  • 原文地址:https://www.cnblogs.com/wy0526/p/11788468.html
Copyright © 2011-2022 走看看