zoukankan      html  css  js  c++  java
  • c_数据结构_顺序表

    #define OK 1
    #define ERROR 0
    #define OVERFLOW  -2
    #define LIST_INIT_SIZE  100   // 线性表存储空间的初始分配量
    #define List_Increment 10   //线性表存储空间的分配增量 
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    typedef struct{
    
        int *elem;   //存储空间的基地址  
        int length;
        int listsize;   //定义的一个大小
    
    }SqList;   //申请结构体变量SqList ,SqList作为类型可以声明新的结构体变量,如:SqList l,m[34],*n;
     
    
    
    //初始化 (构造空的线性表)
    InitList_Sq(SqList &L)
     {  
        L.elem=(int *)malloc(LIST_INIT_SIZE * sizeof(int));  //存储空间的元素空间大小
        if(!L.elem)exit(OVERFLOW);      // 若没有表,则返回overflow
        L.length=0;
        L.listsize= LIST_INIT_SIZE;
        printf("------------------申请空间成功----------------
    ");
        return OK;
    }
    struct GetElem_Sq(SqList&L,int i, int &e){    //查找元素
    
        printf("请输入查找位置:");
        scanf("%d",&i);
        if(i<1 || i>L.length) {  //判断查找元素是否在申请空间内
            printf("元素不在空间位置内!!
    
    ");
            return ERROR;
        }
        e=L.elem[i-1];     // 逐个查找元素
        printf("查找的元素为:%d
    
    ",e);
        return OK;
    
    };
    
    
    //在i位置插入元素
    ListInsert_Sq(SqList&L,int i,int e){   
        int *p,*q;
        printf("请输入插入位置:");
        scanf("%d",&i);
        printf("插入数据:");
        scanf("%d",&e);
        if(i<1||i>L.length+1){
            printf("插入位置不在顺序空间内!!!
    
    ");   // 如果i值不合法(没有在申请空间内)则返回0
            return ERROR;
        }
        if(L.length>=L.listsize){         //如果存储空间已满,则增加分配容量
            int* newbase=(int*)realloc(L.elem,(L.listsize+List_Increment)*sizeof(int));   //再次申请空间
            if(newbase==NULL)
                printf("存储空间分配失败
    
    ");   //存储空间分配失败
            L.elem=newbase;          //新的基地址
            L.listsize=L.listsize+List_Increment;    //容量增加
        }
        q=&L.elem[i-1];      //e元素在i处插入
        for(p=&(L.elem[L.length-1]);p>=q;--p)      //元素值整体后移
            *(p+1)=*p;
        *q=e;             //插入e元素
        ++L.length;   //表长加一
        return OK;
    }
    
    ListDelete_Sq(SqList&L,int i,int &e){     // 删除列表中某个位置的元素
        int *p,*q;
        printf("请选出删除元素位置:");
        scanf("%d",&i);
        if(i<1 || i>L.length){            // 判断删除位置是否在存储空间内
            printf("删除位置不在空间内!!!
    
    ");
            return ERROR;
        }
        p=&(L.elem[i-1]);   //p为被删除的元素
        e=*p;
        printf("删除值为:%d
    
    ",e);
        q=L.elem+L.length-1;  // 表长减一
        for(++p;p<=q;p++)    //删除元素后 后继元素整体前移
            *(p-1)=*p;
        --L.length;
        return OK;
    
    }
    
    int creatnewlist(SqList &L)            //创建列表 
    {
        int i,n;    
        printf("
    
    请用户先存入数据
    
    请选择存入数据个数:");    
        scanf("%d",&n);
        while(n<=0){    
            printf("
    数据个数小于‘1’
    请重新存入数据个数:");
            scanf("%d",&n);
        }
        printf("请输入%d个数据:
    ",n);    
        if(n>LIST_INIT_SIZE){  
            L.elem=(int *)realloc(L.elem,(n+List_Increment)*sizeof(int));  //再次申请空间
            if(!L.elem)exit(OVERFLOW);           //如果没有列表 则返回overflow 0
            L.listsize=n+List_Increment;    
        }
        for(i=0;i<n;i++)               //将元素逐一写入列表
        //    printf("-----------
    ");
            scanf("%d",L.elem+i);
        L.length=n;
        return OK;
    }
    // 逐一打印列表中的元素
    int pr(SqList &L){
        int i;
        if(L.length<1){
            printf("列表为空!!
    
    ");
        }else{
            for(i=0;i<L.length;i++){
                printf("表中元素第%d个元素为:%d
    
    ",i,*(L.elem+i));
            
            }
        
        }
            return OK;
    }
    void ClearList(SqList &L){   //释放已经申请的空间
    
        free(L.elem);
        printf("释放空间成功!!
    
    ");
        InitList_Sq(L);     //调用 InitList_Sq() 创建空的线性表
        creatnewlist(L);    //调用 createnewlist()建立新的列表 
    }
    
    void OperateMenu(){       //操作菜单
    
        printf("--------------元素处理方式---------
    
    ");
        printf("0> 退出
    
    ");
        printf("1>: 查找给定位置的数据
    
    ");
        printf("2>: 插入元素
    
    ");
        printf("3>: 删除元素
    
    ");
        printf("4>: 打印元素
    
    ");
        printf("5>: 释放原列表,创建新列表
    
    ");
        printf("请选择对元素的处理:");
    
        
    }
    
    void main(){
        int i=1,e=0,k,boo=1,w=0;
        SqList L;    //声明
        printf("注:此测试过程输入值应全为数字
    
    ");
        printf("请用户选择存入数据或退出程序:
    
    ");
        printf("存入数据请输入:'1'
    
    ");
        printf("退出请选择'0'或 其它!!
    
    ");
        printf("请选择:");
        scanf("%d",&w);
        if(w==1){
            InitList_Sq(L);     //调用 InitList_Sq() 创建空的线性表
            creatnewlist(L);    //调用 createnewlist()建立新的列表 
            OperateMenu();     //指令导向
            scanf("%d",&k);
            while(k){
                switch (k)
                {
                    case 0:break;
                    case 1:boo=GetElem_Sq(L,i,e);
                        if(boo)
                            printf("查询成功!!
    
    ");
                        else
                            printf("查询失败!!
    
    ");
                           break;
                    case 2:boo=ListInsert_Sq(L,i,e);
                        if(boo)
                            printf("插入成功!!
    
    ");
                        else
                            printf("插入失败!!
    
    ");
                        break;
                    case 3:boo=ListDelete_Sq(L,i,e);
                        if(boo)
                            printf("删除成功!!
    
    ");
                        else
                            printf("删除失败!!
    
    ");
                        break;    
                    case 4:pr(L);
                        break;
                    case 5:ClearList(L);break;
                }
                OperateMenu();
                scanf("%d",&k);
            }
        }else{
            exit(OVERFLOW);
        }
    
    }
  • 相关阅读:
    《日志文件保存》logging
    《火车站信息显示》
    我为什么相信“人造韩寒”?
    研究途径多样性的价值
    推荐一个“思想史上的失踪者”——张鹤慈
    观“方韩大战”
    如何理性的挺韩?从韩寒愚人节的微博说起
    “方韩大战”与独立思考
    《超越感觉:批判性思考指南》读书笔记
    推荐一个在线古典音乐频道
  • 原文地址:https://www.cnblogs.com/Vera-y/p/9971222.html
Copyright © 2011-2022 走看看