zoukankan      html  css  js  c++  java
  • 顺序表的操作

     1 //代码来自浙大数据结构的讲义
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #define  MAXSIZE 10
     5 
     6 typedef struct {
     7     ElementType Data[MAXSIZE];
     8     int last;  //这里的last代表,顺序表最后一个元素的下标,若有n个元素,其值为n-1.  MAXSIZE代表表的最大容量.
     9 }List;    //定义了一种类型
    10 List L, *ptrL;    //这种记法省下了struct
    11 
    12 
    13 //访问下标为i的元素(i从0开始)
    14 L.Data[i];
    15 ptrL->Data[i];
    16 
    17 
    18 //////////////////////////////////////////////////////////////////////////
    19 //主要操作实现
    20 //////////////////////////////////////////////////////////////////////////
    21 
    22 
    23 //1.初始化,建立空表
    24 List *MakeEmpty()
    25 {
    26     List *ptrL;
    27     ptrL = (List *)malloc(sizeof(List));// 需要带上(List *),类似于 ptrL = new List[sizeof(List)];  malloc需要加stdlib.h
    28     ptrL->last = -1;                    //sizeof判断类型或者变量的长度.
    29     return ptrL;    //相当于该顺序表的入口
    30 }
    31 
    32 //2.查找
    33 int Find(ElementType X, List *ptrL)
    34 {
    35     int i = 0;
    36     while (i <= ptrL->last && ptrL->Data[i] != X) //必须在数组里且未找到X时,可以i++
    37     {
    38         i++;
    39     }
    40     if (i > ptrL->last)//说明到最后一位也没有找到x;如果最后一位找到X的话,i不会再增加
    41     {
    42         return -1;    //代表没找到
    43     }
    44     else
    45         return i;
    46 }
    47 
    48 //3.插入操作  其后的元素先往后移动,后插入   i<= i <= n+1  最后一个元素位置的后一个是n+1处.
    49 void Insert(ElementType X, int i, List *ptrL)
    50 {
    51     if (ptrL->last == MAXSIZE - 1)
    52     {
    53         printf("表满");
    54         return;                        //要有return
    55     }
    56     if (i < 1 || i > ptrL->last + 2)
    57     {
    58         printf("位置不合法");
    59         return;
    60     }
    61     for (int j = ptrL->last; j >= i - 1; j--)//j >= i - 1   第i个位置的下标为i-1
    62     {
    63         ptrL->Data[j + 1] = ptrL->Data[j];
    64     }
    65     ptrL->Data[i - 1] = X;
    66     ptrL->last++;    //last仍然要指向最后元素
    67     return;  //这里的return无所谓的.
    68 }
    69 
    70 //4.删除操作    i<= i <= n
    71 void Delete(int i, List *ptrL)
    72 {
    73     if (ptrL->last == 0)
    74     {
    75         printf("表为空,无法删除");
    76         return;
    77     }
    78     if (i < 1|| i > ptrL->last + 1)
    79     {
    80         printf("位置不合法");
    81         return;
    82     }
    83     for (int j = i - 1; j <= ptrL->last; j++)  //第i个位置的下标为i-1
    84     {
    85         ptrL->Data[j] = ptrL->Data[j + 1];        //ptrL是指向List的指针
    86     }
    87     ptrL->last--;
    88 }
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    poj1978
    poj3505
    免费专利讲座
    没有找到MFC80UD.DLL"没有找到MFC80UD.DLL,
    新手学C++/CLI及C#
    怎样激发技术人员的创新力?
    关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
    绝好的一套针对初学者的JavaScript教程
    VC如何将自身进程提升至管理员权限
    如何寻找优秀的专利代理人
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/7442694.html
Copyright © 2011-2022 走看看