• c语言描述的顺序表实现


    //顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作)
    #include<stdio.h>
    #include<stdlib.h>
    #define OK 1
    #define ERROR 0
    #define LIST_INIT_SIZE 100
    #define INCREMENT 10
    typedef int ElemType;
    typedef struct{
            ElemType *elem;//数组指针代表存储基址
            int length;//当前顺序表长度
            int listsize;//当前已经分配的空间大小
    }Sqlist;//顺序表的长度不一定会占满已经分配的空间
    static Sqlist L;
    static int e;
    int Initlist(Sqlist *L){
        int i,length;
        printf("请输入顺序表的长度:
    ");
        scanf("%d",&length);
        L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
        if(!L->elem){
            return ERROR;
        }
        printf("输入%d个元素,以空格隔开:
    ",length);
        for(i=0;i<length;i++){
        scanf("%d",&L->elem[i]);
        }
        L->length=length;
        L->listsize=LIST_INIT_SIZE;
        return OK;
    }
    void TraverseList(Sqlist *L){
        int i;
        if(!L){
            printf("空表!");
            exit(ERROR);
        }
        for(i=0;i<L->length;i++){
            printf("%d
    ",L->elem[i]);
        }
    }
    int ListInsert(Sqlist *L,int e,int m){
        ElemType *newbase;
        ElemType *p,*q;
        if(m<1||m>L->length){
                return ERROR;
        }
        if(L->length>=L->listsize){
            printf("当前空间满了!重新分配内存
    ");
            newbase=(ElemType *)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(ElemType));
            if(!newbase){
                return ERROR;
            }
            L->elem=newbase;
            L->listsize+=INCREMENT;
        }
        q=&(L->elem[m-1]);
        for(p=&(L->elem[L->length-1]);p>=q;p--){
            *(p+1)=*p;//从后往前依次后移
        }
        *q=e;
        L->length++;
        return OK;
    }
    int ListDelete(Sqlist *L,int m){
        if(m<1||m>L->length){
            return ERROR;
        }else{
            ElemType *p,*q;
            
            p=&(L->elem[m-1]);
            free(p);
            for(q=&(L->elem[L->length-1]);q>L->elem[m-1];q++){
                *(q-1)=*q;//从后往前依次前移
            }
        }
        return OK;
        
    }
    int main(){
        int i,n,m;
        if(Initlist(&L)==ERROR){
            printf("创建失败!");
            return ERROR;
        }
        TraverseList(&L);
        printf("输入要插入元素的和要插入的位置 用空格隔开!
    ");
        scanf("%d%d",&n,&m);
        TraverseList(&L);
        printf("输入要删除的元素位置:
    ");
        scanf("%d",&n);
        if(!ListDelete(&L,n)){
            printf("删除失败!");
            TraverseList(&L);
        }
        return OK;
    }
  • 相关阅读:
    Linux目录结构
    Linux简介
    队列、生产者消费者模型
    Process的几个用法和守护进程
    并发编程(初学)
    网络编程知识点小结
    用socketserver模块实现并发
    粘包问题、解决粘包问题和struct模块
    模拟ssh功能和subprocess模块
    socket 套接字编程
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5703548.html
Copyright © 2020-2023  润新知