线性表

  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3. #define MaxSize 50  
  4. typedef char ElemType;  
  5.   
  6.  typedef struct   
  7.  {  
  8.     ElemType elem[MaxSize];          //存放顺序表中的元素  
  9.     int length;                      //存放顺序表的长度  
  10.  } SqList;  
  11.  void InitList(SqList *&L)          //初始化线性表,构造一个空的线性表,并将长度设置为0  
  12.  {  
  13.     L=(SqList *)malloc(sizeof(SqList));  
  14.     L->length=0;  
  15.  }  
  16.  void DestroyList(SqList *L)        //销毁线性表,即释放线性表所占用的内存空间  
  17.  {  
  18.     free(L);  
  19.  }  
  20.  int ListEmpty(SqList *L)           //判断线性表是否为空 即看其长度是否为0  
  21.  {  
  22.     return(L->length==0);  
  23.  }   
  24.  int ListLength(SqList *L)          //求线性表的长度  
  25.  {  
  26.     return(L->length);  
  27.  }  
  28.  void DispList(SqList *L)            //输出线性表  
  29.  {  
  30.     int i;  
  31.     if (ListEmpty(L)) return;  
  32.     for (i=0;i<L->length;i++)  
  33.         printf("%c",L->elem[i]);  
  34.     printf("\n");  
  35.  }  
  36.  int GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素的值  
  37.  {  
  38.     if (i<1 || i>L->length)  
  39.         return 0;  
  40.     e=L->elem[i-1];  
  41.     return 1;  
  42.  }  
  43.  int LocateElem(SqList *L, ElemType e)//按元素查找,找到与该元素值相同的元素并返回其序号  
  44.  {  
  45.     int i=0;  
  46.     while (i<L->length && L->elem[i]!=e) i++;  
  47.     if (i>=L->length)  
  48.         return 0;  
  49.     else  
  50.         return i+1;  
  51.  }  
  52.  int ListInsert(SqList *&L,int i,ElemType e)//插入数据元素,在第i个位置上插入新元素,使后面的元素依次后移,并是长度加1;  
  53.  {  
  54.     int j;  
  55.     if (i<1 || i>L->length+1)  
  56.         return 0;  
  57.     i--;                                 /*将顺序表位序转化为elem下标*/  
  58.     for (j=L->length;j>i;j--)           /*将elem[i]及后面元素后移一个位置*/  
  59.         L->elem[j]=L->elem[j-1];  
  60.     L->elem[i]=e;  
  61.     L->length++;                        /*顺序表长度增1*/  
  62.     return 1;  
  63.  }  
  64.  int ListDelete(SqList *&L,int i,ElemType &e) //删除某个元素,使后面的元素依次前移,并将线性表的长度减1;  
  65.  {  
  66.     int j;  
  67.     if (i<1 || i>L->length)  
  68.         return 0;  
  69.     i--;                                /*将顺序表位序转化为elem下标*/  
  70.     e=L->elem[i];  
  71.     for (j=i;j<L->length-1;j++)  
  72.         L->elem[j]=L->elem[j+1];  
  73.     L->length--;  
  74.     return 1;  
  75.  }  
  76.  void main()                            //主函数,主要为各个函数的调用  
  77.  {  
  78.     SqList *L;  
  79.     ElemType e;  
  80.     printf("(1)初始化顺序表L\n");  
  81.     InitList(L);  
  82.     printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");  
  83.     ListInsert(L,1,'a');  
  84.     ListInsert(L,2,'b');  
  85.     ListInsert(L,3,'c');  
  86.     ListInsert(L,4,'d');  
  87.     ListInsert(L,5,'e');  
  88.     printf("(3)输出顺序表L:");  
  89.     DispList(L);  
  90.     printf("(4)顺序表L长度=%d\n",ListLength(L));  
  91.     printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));  
  92.     GetElem(L,3,e);  
  93.     printf("(6)顺序表L的第3个元素=%c\n",e);  
  94.     printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));  
  95.     printf("(8)在第4个元素位置上插入f元素\n");  
  96.     ListInsert(L,4,'f');  
  97.     printf("(9)输出顺序表L:");  
  98.     DispList(L);  
  99.     printf("(10)删除L的第3个元素\n");  
  100.     ListDelete(L,3,e);  
  101.     printf("(11)输出顺序表L:");  
  102.     DispList(L);  
  103.     printf("(12)释放顺序表L\n");  
  104.     DestroyList(L);  
  105.  }  
  106. 参考:https://blog.csdn.net/ciganxian/article/details/27549653
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值