zoukankan      html  css  js  c++  java
  • 数据结构C语言版--静态顺序表的基本功能实现(一)

    /*
    * 功能:创建一个线性表,并输出 
    * 静态分配内存
    */ 
    #include<stdio.h>                           //stdio.h是C的标准I/O库
    //#include<iostream>                        //iostream是C++的标准I/O库
    //using namespace std;                      //命名空间 
    #define LIST_INIT_SIZE 5                    //#define是宏定义 
    //1。定义结构体                               //定义结构体类型,结构体名为StaticList 
    typedef struct {
        int elem[LIST_INIT_SIZE];               //结构体成员变量 
        int length;                             //线性表长度变量 
        int listsize;                           //线性表最大长度变量 
    }StaticList; 
    //2.初始化 
    void InitList_StaticList(StaticList &L){
        L.length = 0;                           //表中实际元素的个数 
        L.listsize = LIST_INIT_SIZE;            //这段连续空间可用的最大空间 
    }
    //3.插入表尾 
    int InsEnd_SList(StaticList &L, int x){     //执行插入操作 
        if(L.length == L.listsize){             //插入之前应先判断空间是否足够插入
            printf("空间已满!
    "); 
            return -1;                          //否就返回-1 
        }
        else{
            L.elem[L.length] = x;               //是就插入x的值 
            L.length++;                         //元素个数加+ 
            return 1;                           //返回1 
        }
    } 
    //4.插入表头
    int InsHead_SList(StaticList &L, int x){
        if(L.length == L.listsize){  
            printf("空间已满!
    "); 
            return -1;
        }
        else{
            for(int i = L.length-1;i >= 0;i--){ //循环从表尾开始i是表的长度减一 ,循环到0的话刚好是循环到表头。 
                L.elem[i+1] = L.elem[i];        //L.elem[i]刚好是表最后一位数,因为数组是从0开始的 
            }
        L.elem[0] = x;                          //表头的位置移出后把传进的数据加到表头上 
        L.length++;                             //长度加以一 
        return 1;
        }
    }  
    //5.插入第i位置(包括表头、表尾)
    int InsI_SList(StaticList &L,int i,int x){
        if(L.length == L.listsize){
            printf("空间已满!
    "); 
            return -1; 
        }if(i < 1 || i > L.length +1 ){
            printf("位置不合法!
    ");
            return -1; 
        } 
        else{
            for(int j = L.length-1; j >= i-1;j--){
                L.elem[j+1] = L.elem[j];
            } 
            L.elem[i-1] = x;
            L.length++;
            return 1;
        }
    }
    //6.删除表尾 
    int DelEnd_SList(StaticList &L){
        if(L.length == 0){                      //长度为0 
            printf("空表!
    ");
            return -1; 
        } 
        else{
            L.length--;                         //删除表尾元素只需要把长度减一即可 
            return 1;
        } 
    } 
    //7.删除表头
    int DelHead_SList(StaticList &L){
        if(L.length ==0){
            printf("空表!
    ");
            return -1; 
        }
        else{
            for(int j = 1; j < L.length;j++){
                L.elem[j-1] = L.elem[j];
            }
            L.length--;
            return 1;
        }
    } 
    //8.删除第i位置的元素 
    int DelI_SList(StaticList &L,int i){
        if(L.length == 0){
            printf("空表!"); 
            return -1; 
        }
        if(i < 1 || i > L.length){
            printf("位置不合法!");
            return -1; 
        }   
        else{
            for(int j = i; j < L.length; j++){
                L.elem[j-1] = L.elem[j];
            } 
            L.length--;
            return 1;
        }
    }
    
    //.输出 
    void print(StaticList &L){                  //一个函数,打印出线性表所有的元素 
        for(int i = 0; i <= L.length-1; i++){   //循环打印 ,(若只是i<L.length-1,   L.length就不需要减一) 
            printf("%d ", L.elem[i]);           //打印出数组elem[i]的值 
        }
        printf("
    ");                           //C++中使用cout<<endl作回车 
    } 
    
    //主函数 
    int main(void){
        StaticList SL;                          //定义结构体变量 C++语言语法
        //struct StaticList SL;                     //定义结构体变量 C语言语法 
        int i,n;
        InitList_StaticList(SL);                //创建SL表 
        printf("Enter Number:
    ");
        while(1){                               //循环输入 
            int x;  
            scanf("%d",&x);
            if(x == 9999)                       //如果输入的数为9999时,就停止输入 
                break;
            else
                InsEnd_SList(SL,x);             //否则就插入输入的数 
        }
        printf("The Array Elem:");
        print(SL);                              //调用打印线性表的函数 
        printf("(1).插入表尾:输入要插入的数据:
    ");
        scanf("%d",&i); 
        InsEnd_SList(SL,i);                     //1.表尾插入操作 
        printf("The Array Elem:");
        print(SL);
        printf("(2).插入表头:输入要插入的数据:
    ");
        scanf("%d",&i);
        InsHead_SList(SL,i);                    //2.表头插入操作 
        printf("The Array Elem:");
        print(SL);
        printf("(3).插入第i位置:输入位置和数据:
    ");
        scanf("%d%d",&i,&n); 
        InsI_SList(SL,i,n);                     //3.第i位置插入操作 
        printf("The Array Elem:");
        print(SL);
        printf("(4).删除表尾元素:
    ");
        DelEnd_SList(SL);                       //4.删除表尾操作 
        printf("The Array Elem:");
        print(SL);
        printf("(5).删除表头元素:
    ");
        DelHead_SList(SL);                      //5.删除表头操作 
        printf("The Array Elem:");
        print(SL);
        printf("(6).删除第i位置元素:输入位置:
    ");
        scanf("%d",&i);
        DelI_SList(SL,i);                       //6.删除第i位置的元素 
        printf("The Array Elem:");
        print(SL); 
        return 0;
    }
  • 相关阅读:
    centos同步北京时间
    django-migrate一败再败
    Mac-无法进入mysql,你这样做就对了
    celery beat
    devops--django+ldap
    本地终端连接到远程服务器
    Mac--ModuleNotFoundError: No module named 'magic'
    一站式解决Mac--socket.gaierror: [Errno 8] nodename nor servname provided, or not known
    docker--常用指令
    Mac--管理mysql、redis服务的常用命令
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10454034.html
Copyright © 2011-2022 走看看