找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 547|回复: 0
打印 上一主题 下一主题
收起左侧

C语言线性表的顺序存储结构

[复制链接]
跳转到指定楼层
楼主
ID:647532 发表于 2023-4-21 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. // 线性表的顺序存储结构
  4. #define ListSize 100
  5. typedef char DataType;
  6. typedef struct{
  7.         DataType data[ListSize];
  8.         int length;
  9. }SeqList;

  10. SeqList mylist;//global value

  11. //在指定位置插入元素
  12. void InsertList(SeqList *L,int pos,DataType val)
  13. {
  14.         int i,q=0;
  15.         if(pos<1 || pos>L->length+1) //   假如顺序表为 1,2,3,4,5,可以插入的位置是1,2,3,4,5,6
  16.         {
  17.                 printf("position error\n");
  18.                 return;
  19.         }
  20.         if(L->length>=ListSize){   //当length=ListSize时,表示顺序表已满
  21.                 printf("overflow\n");
  22.                 return;
  23.         }
  24.         
  25.         for( i=L->length ;i>=pos;i--){  //当i的位置为1——length+1时需要移动length-i+1
  26.                 L->data[i]=L->data[i-1];
  27.                 q++;
  28.         }
  29.         L->data[pos-1]=val;
  30.         printf("循环体执行了%d次,理论上计算值为n-i+1次%d\n",q,L->length-pos+1);
  31.         L->length ++;
  32.         printf("在顺序表中插入新的元素%c在表中%d的位置",val,pos);
  33.         
  34. }
  35. DataType  DeleteList(SeqList *L,int pos)//在顺序表L中第i个位置之前插入一个新的元素下
  36. {
  37.         int i,q=0;  
  38.         DataType x;
  39.         if(pos<1 || pos>L->length)
  40.         {
  41.                 printf("position error\n");
  42.                 exit (0); //程序非正常退出,并给一个统一的返回值0,在stdlib.h中有定义
  43.         }
  44.         x=L->data[pos-1];

  45. /*        for(i=pos-1;i+1<L->length ;i++){
  46.                 q++;
  47.                 L->data[i]=L->data[i+1];
  48.                
  49.         }
  50. */        
  51.         
  52.         for(i=pos;i<L->length;i++) {
  53.                 q++;
  54.                 L->data[i-1]=L->data[i];
  55.         }
  56.         
  57.         L->length --;
  58.         printf("表中位置%d的元素%c已经被删除了\n",pos,x);
  59.         printf("循环体执行了%d次,理论上计算值为n-i次%d\n",q,L->length+1-pos);
  60.         return x;
  61. }

  62. void PrintList(SeqList *L)   //打印输出顺序表
  63. {
  64.         int i;
  65.         for(i=0;i<L->length;i++){
  66.                 printf("%c,",L->data[i]);
  67.         }
  68.         printf("\n");
  69. }
  70. //创建一个顺序表
  71. CreateList(SeqList *L)
  72. {
  73.         int i=0;
  74.         L->length=0;
  75.         char ch;
  76.         ch=getchar();
  77.         printf("创建的顺序表如下:");
  78.                 while(ch!='\n'){
  79.                         L->data[i]=ch;
  80.                         
  81.                         L->length++;
  82.                         
  83.                         ch=getchar();
  84.                         printf("%c,",L->data[i]);
  85.                         i++;
  86.                 }
  87.                 printf("表长length=n=%d\n",L->length);
  88. }
  89. //顺序表逆置
  90. void Converts(SeqList *L){
  91.         int i;
  92.         DataType temp;
  93.         for(i=0;i<L->length/2;i++)
  94.         {
  95.                 temp=L->data[i];
  96.                 L->data[i]=L->data[L->length-1-i];
  97.                 L->data[L->length-1-i]=temp;
  98.                
  99.         }
  100.         return;
  101. }
  102. void MaxMin(SeqList *L,DataType*max,DataType *min,int *k,int *j){
  103.         int i;
  104.         *max=L->data[0];*min=L->data[0];
  105.         *k=*j=0;
  106.         for(i=1;i<L->length;i++) {
  107.                 if(L->data[i]>*max){
  108.                         *max=L->data[i];*k=i;
  109.                 }
  110.                         
  111.                 else if (L->data[i]<*min){
  112.                         *min=L->data[i];*j=i;
  113.                 }
  114.                         
  115.         }
  116. }

  117. int main()
  118. {
  119.         
  120.         int max=0,min=0,k=0,j=0;
  121.         
  122.         
  123.         CreateList(&mylist);
  124.         InsertList(&mylist,9,'A');
  125.         PrintList(&mylist);
  126.         DeleteList(&mylist,9);
  127.         PrintList(&mylist);
  128.         Converts(&mylist);
  129.         PrintList(&mylist);
  130.         MaxMin(&mylist,&max,&min,&k,&j);
  131.         printf("max=%c,min=%c,k=%d,j=%d",max,min,k,j);
  132.         return 0;
  133. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表