• 使用C语言实现静态顺序表


    目录

    1.顺序表的定义

    2.顺序表的逻辑结构与物理存储结构

    3.顺序表的结构定义

    4.顺序表的功能实现

    (1)顺序表的初始化

    (2)顺序表的判空和判满

    (3)顺序表的后插操作和定位插入元素

    (4)顺序表元素的定位删除操作和按值删除操作

    (5)删除表和打印操作

    (6)主函数

    (7)测试用例


    1.顺序表的定义

    用顺序存储的方式实现线性表顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系又存储的邻接关系体现。

    注:“静态”这里指空间的大小固定。

    2.线性表的逻辑结构与物理存储结构

     注:每个相邻的元素所占的空间大小相同。

    3.顺序表的结构定义

    1. #include
    2. #include
    3. #define MAXSIZE 10
    4. typedef int ElemType;
    5. typedef struct {
    6. ElemType data[MAXSIZE];
    7. int length;
    8. }SqList;

    4.顺序表的功能实现

    (1)顺序表的初始化

    1. //顺序表的初始化
    2. void InitSqList(SqList&L){
    3. for(int i=0;i
    4. L.data[i]=0;
    5. }
    6. L.length=0;
    7. }

    (2)顺序表的判空和判满

    1. //操作清单
    2. void MenuSqList(){
    3. printf("-------------1.插入操作-------------\n");
    4. printf("-------------2.定位插入操作---------\n");
    5. printf("-------------3.查找操作-------------\n");
    6. printf("-------------4.定位删除操作---------\n");
    7. printf("-------------5.按值删除元素---------\n");
    8. printf("-------------6.删除整个顺序表-------\n");
    9. printf("-------------7.打印操作-------------\n");
    10. printf("-------------8.结束操作-------------\n");
    11. }
    12. //判断顺序表是否空
    13. bool IsEmpty (SqList L){
    14. if(L.length<=0){
    15. return true;
    16. }else {
    17. return false;
    18. }
    19. }
    20. //判断顺序表是否为满
    21. bool IsFull(SqList L){
    22. if(L.length>=MAXSIZE){
    23. return true;
    24. }else{
    25. return false;
    26. }
    27. }

    (3)顺序表的后插操作和定位插入元素

    1. //顺序表的插入操作
    2. void ListInsert(SqList&L,ElemType e) {
    3. if(IsFull(L)){
    4. printf("顺序表已满!\n");
    5. return ;
    6. }
    7. L.data[L.length]=e;
    8. L.length++;
    9. }
    10. //定位向顺序表中插入数据
    11. void ListInsertLocate(SqList&L,int i,ElemType e){
    12. if(i<0||i>L.length+1){
    13. printf("输入的插入元素位置不合法\n");
    14. return ;
    15. }
    16. if(L.length>=MAXSIZE){
    17. printf("存储空间已满!\n");
    18. return ;
    19. }
    20. for(int j=L.length;j>=i;j--){
    21. L.data[j]=L.data[j-1];
    22. }
    23. L.data[i-1]=e;
    24. L.length++;
    25. }

    (4)顺序表元素的定位删除操作和按值删除操作

    1. //定位删除操作
    2. void DeleteElemType(SqList&L,int i,ElemType&e){
    3. if(i<0||i>L.length+1){
    4. printf("输入的插入元素位置不合法\n");
    5. return ;
    6. }
    7. e=L.data[i-1];
    8. for(int j=i-1;j
    9. L.data[j]=L.data[j+1];
    10. }
    11. L.length--;
    12. }
    13. //顺序表按值删除(删除第一个元素为e的值)
    14. void DeleteElem(SqList&L,ElemType&e) {
    15. int index=0;
    16. for(int i=0;i
    17. if(L.data[i]==e){
    18. index=i;
    19. break;
    20. }
    21. }
    22. for(int j=index;j
    23. L.data[j]=L.data[j+1];
    24. }
    25. L.length--;
    26. }

    (5)删除表和打印操作

    1. //删除顺序表
    2. void DeleteSqList(SqList&L){
    3. for(int i=0;i
    4. L.data[i]=0;
    5. }
    6. L.length=0;
    7. }
    8. //顺序表的打印操作
    9. void PrintSqList(SqList L){
    10. for(int i=0;i
    11. printf("%d\t",L.data[i]);
    12. }
    13. printf("\n");
    14. }

    (6)主函数

    1. int main() {
    2. SqList L;
    3. //对顺序表进行初始化
    4. InitSqList(L);
    5. //对顺序表进行插入操作
    6. ElemType x;
    7. int flag=-1;
    8. //各种操作
    9. while(1) {
    10. int i=0;
    11. ElemType e=0;
    12. MenuSqList();
    13. printf("请输入操作: ");
    14. scanf("%d",&flag);
    15. switch(flag){
    16. case 1:
    17. printf("请输入元素(-1_end): ");
    18. scanf("%d",&x);
    19. while(x!=-1) {
    20. ListInsert(L,x);
    21. printf("请输入元素(-1_end): ");
    22. scanf("%d",&x);
    23. }
    24. break;
    25. case 2:
    26. printf("请输入元素插入位置: \n");
    27. scanf("%d",&i);
    28. printf("请输入元素: ");
    29. scanf("%d",&x);
    30. ListInsertLocate(L,i,x);
    31. break;
    32. case 3:
    33. printf("请输入查找元素位置: ");
    34. scanf("%d",&i);
    35. if(i<0||i>=L.length+1){
    36. printf("输入的查找元素位置不合法!\n");
    37. break;
    38. }
    39. printf("Elem = %d\n",L.data[i-1]);
    40. break;
    41. case 4:
    42. printf("请输入删除的定位位置: ");
    43. scanf("%d",&i);
    44. DeleteElemType(L,i,e);
    45. printf("删除成功元素=%d\n",e);
    46. break;
    47. case 5:
    48. printf("请输入要删除的元素: ");
    49. scanf("%d",&e);
    50. DeleteElem(L,e);
    51. break;
    52. case 6:
    53. DeleteSqList(L);
    54. printf("删除成功!\n");
    55. break;
    56. case 7:
    57. PrintSqList(L);
    58. break;
    59. default:
    60. printf("结束操作\n");
    61. }
    62. if(flag==8){
    63. break;
    64. }
    65. }
    66. return 0;
    67. }

    (7)测试用例

     

     

  • 相关阅读:
    计算机毕业设计Javavue架构云餐厅美食订餐系统(源码+系统+mysql数据库+lw文档)
    [附源码]计算机毕业设计疫苗药品批量扫码识别追溯系统Springboot程序
    shell编写循环检查脚本
    潼南柠檬产业发展大会举行 这三个场景“柠”聚了人气
    你在犹豫吗?--疫情换工作后记
    SpringBoot中“@SpringBootApplication“自动配置原理《第七课》
    计算机基础:今天一次把 Unicode 和 UTF-8 说清楚
    Codeforces Round 895 (Div. 3) A-F
    力扣240.搜索二维矩阵II
    Android10.0 锁屏分析-KeyguardPatternView图案锁分析
  • 原文地址:https://blog.csdn.net/Keep_Trying_Go/article/details/126197611