潭影-pjq

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

顺序表—线性表的顺序结构实现(代码)

顺序表—线性表的顺序结构实现

 

复制代码
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 //顺序表的静态实现
  4 #define MaxSize 10                         //定义顺序表最大长度
  5 typedef int ElemType;                      //定义一个类型,便于以后修改
  6 typedef struct {                           //定义顺序表结构体
  7     ElemType data[MaxSize];                //静态数组实现
  8     int length;                            //当前表长度
  9 }SqList;
 10 //初始化顺序表
 11 void InitList(SqList& L)
 12 {
 13     for (int i = 0; i < MaxSize; i++)      //初始化顺序表,将表中元素以及表长设置为0,防止脏数据的影响
 14         L.data[i] = 0;
 15     L.length = 0;
 16 }
 17 //判空操作
 18 bool EmptyList(SqList L) 
 19 {
 20     if (L.length == 0)                     //判断顺序表是否为空
 21         return true;
 22     return false;
 23 }
 24 //插入元素   时间复杂度O(n)
 25 bool ListInsert(SqList& L, int i, ElemType e)
 26 {
 27     if (i<1 || i>L.length + 1)            //判断i的范围是否有效
 28         return false;
 29     if (L.length >= MaxSize)              //当前数组已满,不允许插入
 30         return false;
 31     for (int j = L.length; j >= i; j--)   //插入位置之后的所有元素向后移一位
 32         L.data[j] = L.data[j-1];
 33     L.data[i - 1] = e;                    //将元素插入到对应位置
 34     L.length++;                           //顺序表长度加一
 35     return true;                          //一定要记住,插入或删除元素后,需要将修改顺序表的长度
 36 }
 37 //删除元素   时间复杂度O(n)
 38 bool ListDelete(SqList& L, int i, ElemType& e)
 39 {
 40     if (i<1 || i>L.length)              //判断i的范围是否合法,另删除元素不需要判断表是否已满
 41         return false;
 42     e = L.data[i - 1];                  //取出被删除的元素赋给e,
 43     for (int j = i; j < L.length; j++)  
 44         L.data[j - 1] = L.data[j];      //将被删除位置之后的元素向前移动一位
 45     L.length--;                         //将顺序表的长度减1
 46     return true;
 47 }
 48 //按位查找    时间复杂度O(1)
 49 int GetElem(SqList L, int i)
 50 {
 51     return L.data[i - 1];              //返回第i个位置的元素
 52 }
 53 //按值查找    时间复杂度O(n)
 54 int LocateElem(SqList L, ElemType e)
 55 {
 56     for (int i = 0; i < L.length; i++)
 57         if (e == L.data[i])            //依序查找表中元素是否与所要找的元素相等
 58             return i + 1;
 59     return 0;
 60 }
 61 //打印顺序表
 62 void PrintList(SqList L)
 63 {
 64     int i;
 65     for (i = 0; i < L.length; i++)    //逐一遍历打印顺序表中的元素
 66         printf("%3d", L.data[i]);     //元素之间以空格隔开
 67     printf("\n");
 68 }
 69 //主函数
 70 int main()
 71 {
 72     SqList L;                        //在主函数中定义一个线性表
 73     bool ret;                        //定义一个布尔类型的变量,用于后续操作
 74     int is_deleted;                  //定义一个变量,用于存放被删除的元素
 75     int get_element;                 //定义一个变量,用于存放按位查找到的元素
 76     int locate_element;              //定义一个变量,用于存放按值查找到的元素的位序
 77     InitList(L);                     //初始化
 78     ret= EmptyList(L);               //判空
 79     if (ret)
 80         printf("顺序表是空的\n");
 81     else
 82         printf("顺序表不为空\n");
 83     printf("\n");
 84     L.data[0] = 12;                 //向顺序表中插入一些元素
 85     L.data[1] = 23;
 86     L.data[2] = 34;
 87     L.data[3] = 45;
 88     L.data[4] = 56;
 89     L.length = 5;                  //设置表长
 90     
 91     ret = ListInsert(L, 6, 99);    //在第6个位置(表尾)插入99
 92     if (ret)
 93         printf("插入成功\n");
 94     else
 95         printf("插入失败\n");
 96     PrintList(L);                 //打印插入元素之后的顺序表
 97     ret = ListInsert(L, 1, 108);  //在第1个位置(表头)插入108
 98     if (ret)
 99         printf("插入成功\n");
100     else
101         printf("插入失败\n");
102     PrintList(L);                 //再次打印插入元素之后的顺序表
103     printf("\n");
104 
105     ret=ListDelete(L, 2, is_deleted);//删除元素
106     if (ret)
107         printf("被删除的元素是%d\n", is_deleted);   //打印被删除的元素
108     else                            
109         printf("删除失败\n");
110     PrintList(L);                   //打印删除元素之后的顺序表
111     printf("\n");
112 
113     get_element = GetElem(L, 2);     //按位查找第2个元素
114     printf("第2个元素是%d\n", get_element);
115     printf("\n");
116 
117     locate_element = LocateElem(L, 34);//按值查找元素34的位序
118     printf("34是第%d个元素\n", locate_element);
119 
120     return 0;
121 }
复制代码

 

posted on   潭影-pjq  阅读(46)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示