zoukankan      html  css  js  c++  java
  • C语言顺序表

    顺序表结构可设为一个数组和一个指向尾部的变量,数组用来存放元素,指向尾部的变量在插入元素的时候加一,删除元素的时候减一,始终指向尾部。

    1 typedef int elemtype;
    2 
    3 typedef struct arrayList{
    4     elemtype date[MAXSIZE];
    5     int last;    
    6 }ArrayList; 

    初始化时给对应的指针分配空间,并使last=-1

     1 ArrayList *init_ArrayList(){
     2     
     3     ArrayList *a = (ArrayList *)malloc(sizeof(ArrayList));
     4     if(a==NULL)
     5         return NULL;
     6     
     7     a->last = -1;
     8     return a; 
     9     
    10 }

    插入元素:插入位置为x,使>=x的所有元素向后移动一个位置,然后在该位置插入新元素

     1 int insertList(ArrayList *a,elemtype e,int x) {
     2     
     3     if(a->last>=MAXSIZE-1){
     4         printf("顺序表已满");
     5         return 0;
     6     }
     7     
     8     //顺序表需要顺序插入,即不能在last外插入    
     9     if(x<1 || x>a->last+2){
    10         printf("插入位置错误
    ");
    11         return 0; 
    12     }
    13     
    14     int i;
    15     for(i=a->last;i>=x-1;i--)//last代表数组最后一个元素的下标 
    16         a->date[i+1] = a->date[i];//节点依次向后移动一个位置
    17     a->date[i+1] = e;
    18     a->last++;
    19     return 1; 
    20     
    21 }

    删除元素:使位置x后的所有元素向前移动一个位置

     1 int deleteList(ArrayList *a,int x){
     2     
     3     if(x<1 || x>a->last)
     4         return 0;
     5     
     6     int i;
     7     for(i=x;i<=a->last;i++)
     8         a->date[i-1] = a->date[i];
     9     a->last--;
    10     return 1;
    11     
    12 }

    遍历

    1 void printList(ArrayList *a){
    2     
    3     int i;
    4     for(i=0;i<=a->last;i++)
    5         printf("%d ",a->date[i]);
    6     
    7 }

    试运行:

    void main(){
        
        ArrayList *init_ArrayList();
        int insertList(ArrayList *a,elemtype e,int x);
        int deleteList(ArrayList *a,int x);
        void printList(ArrayList *a);
        
        ArrayList *arrayList = init_ArrayList();
        if(arrayList==NULL){
            printf("空间分配失败");
            return ;
        }
        printf("创建成功
    ");
        
        insertList(arrayList,1,1);
        insertList(arrayList,2,2);
        insertList(arrayList,3,3);
        insertList(arrayList,4,4);
        insertList(arrayList,5,2);
        
        deleteList(arrayList,1);
        
        printList(arrayList);
        
    }

    结果:

    对于顺序表查找最为方便快捷:

     1 int getPois(ArrayList *a,elemtype e){//获得位置 
     2     
     3     int i;
     4     for(i=0;i<=a->last;i++){
     5         if(a->date[i]==e)
     6             return i+1;
     7     } 
     8     return -1;
     9     
    10 }
    11 
    12 elemtype getEle(ArrayList *a,int x){//获得元素 
    13     
    14     if(x<1 || x>a->last+1)
    15         return -1;
    16         
    17     return a->date[x-1];
    18     
    19 }
  • 相关阅读:
    Ida动态修改android程序的内存数据和寄存器数值,绕过so文件的判断语句
    Ida双开定位android so文件
    IDA调试android so文件.init_array和JNI_OnLoad
    超EASY 五步实现Eclipse ASN.1 SDK和插件安装
    记录重装系统的艰苦奋斗历程
    音标
    有道建昆老师~Reading Comprehensive
    Linux之普通用户用sudo建立文件和root用户建立的区别
    名句
    20200307(13)
  • 原文地址:https://www.cnblogs.com/lsy-lsy/p/10025138.html
Copyright © 2011-2022 走看看