• C语言实现线性表连续存储结构相关算法


    使用C语言编写的线性表连续存储结构的各种算法,包括插入,删除,清空,判断是否已满等,以下为代码:

      1 # include <stdio.h>
      2 # include <malloc.h>
      3 # include <stdlib.h>  //包含了exit函数
      4 
      5 struct Arr
      6 {
      7     int * pBase;
      8     int len;
      9     int cnt;
     10 };
     11 
     12 //初始化
     13 void init(struct Arr * p,int length);
     14 //附加新元素
     15 bool append(struct Arr * p,int val);
     16 //添加新元素
     17 bool insert(struct Arr * p,int pos,int val);
     18 //删除一个元素
     19 bool deleteArr(struct Arr * p,int pos);
     20 //删除所有的元素
     21 bool deleteAll(struct Arr * p);
     22 //获取指定位置的元素
     23 int get(struct Arr * p,int pos);
     24 
     25 bool isEmpty(struct Arr * p);//判断是否为空
     26 //判断是否已满
     27 bool isFull(struct Arr * p);
     28 //排序(升序)
     29 bool sortAsc(struct Arr * p);
     30 //反转
     31 void reverse(struct Arr * P);
     32 //显示数组
     33 void show(struct Arr * p);
     34 
     35 int main(int argc, char *argv[])
     36 {
     37     //初始一个有10元素的数组
     38     struct Arr arr;
     39     init(&arr,10);
     40     //加入几个元素
     41     append(&arr,-80);
     42     append(&arr,-40);
     43     append(&arr,50);
     44     append(&arr,60);
     45     append(&arr,3);
     46     append(&arr,10);
     47     append(&arr,30);
     48     show(&arr);
     49     insert(&arr,1,-1);
     50     insert(&arr,11,8);
     51     insert(&arr,3,5);
     52     show(&arr);
     53     deleteArr(&arr,4);
     54     deleteArr(&arr,-8);
     55     show(&arr);
     56     sortAsc(&arr);
     57     printf("排序后输出如下:
    ");
     58     show(&arr);
     59     reverse(&arr);
     60     show(&arr);
     61     return 0;
     62 }
     63 
     64 //初始化
     65 void init(struct Arr * p,int length){
     66     p->pBase=(int *)malloc(sizeof(int) * length);
     67     if(p->pBase==NULL){
     68         printf("数组初始化失败!
    ");
     69     }
     70     p->len=length;
     71     p->cnt=0;
     72 }
     73 //附加新元素
     74 bool append(struct Arr *p,int val){
     75     if(isFull(p))
     76     {
     77         printf("数组已满,元素%d插入失败
    ",val);
     78         return true;
     79     }
     80     p->pBase[p->cnt]=val;
     81     p->cnt=p->cnt+1;
     82     return false;
     83 }
     84 //添加新元素
     85 bool insert(struct Arr * p,int pos,int val)
     86 {
     87     if(isFull(p))
     88     {
     89         printf("数组已满,向第%d个位置插入元素%d失败
    ",pos,val);
     90         return false;
     91     }
     92     if(pos<1||pos>p->cnt+1){
     93         printf("插入位置有误,向第%d个位置插入元素%d失败
    ",pos,val);
     94         return false;
     95     }
     96     for(int i=p->cnt;i>pos-1;i--){
     97         p->pBase[i]=p->pBase[i-1];
     98     }
     99     p->pBase[pos-1]=val;
    100     p->cnt=p->cnt+1;
    101     return true;
    102 }
    103 //删除一个元素
    104 bool deleteArr(struct Arr * p,int pos){
    105     if(isEmpty(p))
    106     {
    107         printf("数组已空,删除第%d个元素%d失败
    ",pos);
    108         return false;
    109     }
    110     if(pos<1||pos>p->cnt){
    111         printf("删除位置有误,删除第%d个位置元素失败
    ",pos);
    112         return false;
    113     }
    114     for(int i=pos;i<p->cnt;i++){
    115         p->pBase[i-1]=p->pBase[i];
    116     }
    117     p->cnt=p->cnt-1;
    118     return true;
    119 }
    120 //删除所有的元素
    121 bool deleteAll(struct Arr * p){
    122     p->cnt=0;
    123 }
    124 //获取指定位置的元素
    125 int get(struct Arr * p,int pos){
    126     if(pos<-1||pos>p->cnt){
    127         printf("获取第%d个元素失败,您输入的位置有误
    !",pos);
    128         return 0;
    129     }
    130     return p->pBase[pos-1];
    131 }
    132 //判断是否为空
    133 bool isEmpty(struct Arr * p){
    134     if(p->cnt==0){
    135         return true;
    136     }
    137     return false;
    138 }
    139 //判断是否已满
    140 bool isFull(struct Arr * p){
    141     if(p->cnt==p->len){
    142         return true;
    143     }
    144     return false;
    145 }
    146 //排序(升序)
    147 bool sortAsc(struct Arr * p){
    148     int t=0,i=0,j=0;
    149     for(i=0;i<p->cnt;i++){
    150         for(j=i+1;j<p->cnt;j++){
    151             if(p->pBase[i]>p->pBase[j]){
    152                 t=p->pBase[j];
    153                 p->pBase[j]=p->pBase[i];
    154                 p->pBase[i]=t;
    155             }
    156         }
    157     }
    158 }
    159 //反转
    160 void reverse(struct Arr * p){
    161     if(isEmpty(p)){
    162         return ;
    163     }
    164     int i=0,t=0,j=0;
    165     j=p->cnt-1;
    166     while(i<j)
    167     {
    168         t=p->pBase[i];
    169         p->pBase[i]=p->pBase[j];
    170         p->pBase[j]=t;
    171         i++;
    172         j--;
    173     }
    174 }
    175 
    176 //显示数组
    177 void show(struct Arr * p){
    178     if(isEmpty(p))
    179     {
    180         printf("数组为空");
    181     }
    182     int i=0;
    183     for(i=0;i<p->cnt;i++){
    184         printf("%d ",p->pBase[i]);
    185     }
    186     printf("
    ");
    187 }

    线性表连续存储结构的算法中,插入与删除是最重要,需要重点掌握以下的两点:

      1)插入或者删除的位置

      2)元素移动的顺序

  • 相关阅读:
    ThinkPHP框架基础知识
    ajax分页练习
    实例练习:购物车
    事件
    ajax基础
    jQuery事件
    jQuery基础
    PHP制作登录注册页面
    iview里tree组件改造
    Vue CLI及其vue.config.js(一)
  • 原文地址:https://www.cnblogs.com/hymhblf/p/3198111.html
Copyright © 2020-2023  润新知