zoukankan      html  css  js  c++  java
  • 线性表之顺序表(C语言实现)

    线性表是从数据元素的逻辑结构上定义的.



    这种数据元素的逻辑结构的特征如下:

    1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素.

    2.第一个元素无前驱元素,但有后继元素.

    3.最后一个元素有前驱元素,单无后继元素.




    可以抽象为如下表述:

    元素1 元素2 元素3 元素4 元素5 元素6


    然而同一种逻辑结构在内存中却可以有两种存储方式:1.在内存中连续存储的线性表-----顺序表(如数组)

                                     2.在内存中离散存储的线性表-----链表(如单链表,双链表)



    对于顺序表有多重操作:初始化,赋值,插入新值,删除值等

    下面的用C代码实现顺序表及其一些常用的操作:

      1 #include<stdio.h>
      2 
      3 #define ERROR 0
      4 
      5 #define InitSize 20 //顺序表的初始大小
      6 
      7 typedef int ElemType;
      8 
      9 typedef struct{
     10     ElemType data[InitSize];
     11     int length;
     12 }sqlist;
     13 
     14 //顺序表初始化
     15 void InitList(sqlist *L)
     16 {
     17     L->length=0;
     18     return ;
     19 }
     20 
     21 //获取顺序表的长度
     22 int GetLength(sqlist *L)
     23 {
     24     return L->length;
     25 }
     26 
     27 //顺序表赋值
     28 void GiveValue(sqlist *L)
     29 {
     30     int value;
     31     int i=0;
     32     while(value!=0)
     33     {
     34         printf("Please input %d valueL-------(exit until value equal 0)
    ",i+1);
     35         scanf("%d",&value);
     36         if(value!=0)
     37         {
     38             L->data[i++]=value;
     39             L->length++;
     40         }
     41     }
     42 }
     43 
     44 
     45 
     46 //获取顺序表某个位置的值
     47 ElemType GetValue(sqlist *L,int i)
     48 {
     49     ElemType e;
     50     if(i>L->length||i<1)
     51         return ERROR;
     52 
     53     int k=0;
     54     for(k=0;k<L->length;k++)
     55     {
     56         if(k==i-1)
     57         e=L->data[k];
     58     }
     59     return e;
     60 }
     61 
     62 //获取顺序表某个值的位置
     63 int GetPos(sqlist *L,ElemType value)
     64 {
     65     int pos;
     66     int judeflag=1;
     67     int i;
     68     for(i=0;i<L->length;i++)
     69     {
     70         if(L->data[i]==value)
     71         {
     72             pos=i+1;
     73             break;
     74         }
     75         judeflag++;
     76     }
     77 
     78     if(judeflag>=L->length)
     79         return ERROR;
     80 
     81     return pos;
     82 }
     83 
     84 //在顺序表指定位置插入新的值
     85 void InsertValue(sqlist *L,int pos,ElemType value)
     86 {
     87     if(pos<1||pos>L->length)
     88         return ERROR;
     89 
     90     int i;
     91     for(i=L->length-1;i>pos-2;i--)
     92     {
     93         L->data[i+1]=L->data[i];
     94     }
     95 
     96     L->data[pos]=value;
     97     L->length++;
     98 }
     99 
    100 //在顺序表中指定位置删除值
    101 void DeleteValue(sqlist *L,int pos)
    102 {
    103     if(pos<1||pos>L->length)
    104         return ERROR;
    105 
    106     int i;
    107     for(i=pos;i<L->length;i++)
    108     {
    109         L->data[i-1]=L->data[i];
    110     }
    111 
    112     L->length--;
    113 }
    114 
    115 //显示顺序表
    116 void ShowList(sqlist *L)
    117 {
    118     int i;
    119     printf("The List show below:
    ");
    120     for(i=0;i<L->length;i++)
    121     {
    122         printf("%d ",L->data[i]);
    123     }
    124 }
    125 
    126 
    127 //主函数
    128 int main()
    129 {
    130     sqlist L;
    131     InitList(&L);//初始化顺序表
    132     GiveValue(&L);//顺序表赋值
    133     ShowList(&L);//显示线性表
    134 
    135     printf("
    
    
    
    ");
    136     int flag;
    137     printf("******************************************************
    ");
    138     printf("*************choose the operation of List*************
    ");
    139     printf("*****************1-指定位置插入值*********************
    ");
    140     printf("*****************2-指定位置删除值*********************
    ");
    141     printf("*****************3-获取顺序表某个值得位置*************
    ");
    142     printf("*****************4-获取顺序表某个位置上的值*********
    ");
    143     printf("*****************5-获取顺序表长度*********************
    ");
    144     printf("*****************0-退出*******************************
    ");
    145     printf("******************************************************
    ");
    146     printf("
    
    
    ");
    147 
    148     printf("Input the value Flag:
    ");
    149     scanf("%d",&flag);
    150 
    151     printf("flag=%d
    ",flag);
    152 
    153     int pos,value,len;
    154     switch(flag){
    155     case 1:
    156         {
    157             printf("Please input the value and position:
    ");
    158             scanf("%d %d",&value,&pos);
    159             printf("Insert value=%d in pos=%d
    ",value,pos+1);
    160             InsertValue(&L,pos,value);
    161             ShowList(&L);
    162             break;
    163         }
    164     case 2:
    165         {
    166             printf("Please input the position:
    ");
    167             scanf("%d",&pos);
    168             printf("Delete value in pos=%d
    ",pos);
    169             DeleteValue(&L,pos);
    170             ShowList(&L);
    171             break;
    172         }
    173     case 3:
    174        {
    175             printf("Please input the value:
    ");
    176             scanf("%d",&value);
    177             pos=GetPos(&L,value);
    178             printf("Get value=%d's position is %d
    ",value,pos);
    179             ShowList(&L);
    180             break;
    181        }
    182     case 4:
    183         {
    184             printf("Please input the position:
    ");
    185             scanf("%d",&pos);
    186             value=GetValue(&L,pos);
    187             printf("Get value=%d from pos=%d
    ",value,pos);
    188             ShowList(&L);
    189             break;
    190         }
    191     case 5:
    192         {
    193             len=GetLength(&L);
    194             printf("the length of List is %d
    ",len);
    195             ShowList(&L);
    196             break;
    197         }
    198     case 0:
    199         printf("you choose to exit
    Goodbye!
    ");
    200     }
    201 
    202     return 0;
    203 }


    结果图:

  • 相关阅读:
    图解zookeeper FastLeader选举算法【转】
    win10 tensorflow python3*,Multiprocessing using fit_generator(pickle_safe=True) fail问题解决
    xcode从8升级到9出现的问题
    c++保存数据到TXT
    基于机器学习人脸识别face recognition具体的算法和原理
    pycharm 操作的一些设置,记录下
    ML-DL-各种资源汇总
    MATLAB实现多元线性回归预测
    【机器学习】 Matlab 2015a 自带机器学习算法汇总
    C++中嵌入python程序——命令行模式
  • 原文地址:https://www.cnblogs.com/vpoet/p/4659722.html
Copyright © 2011-2022 走看看