• C语言实现顺序表


    大二学习数据结构和算法啦,因为之前用Java语言实现过,所以理解起来还是比较轻松,就是理解数组与结构体的运用。废话不多说,上代码!

    结构体

    typedef struct {
        int *data;
        int Maxsz;
        int len;
        
    } SeqList;

    初始化

    void InitList (SeqList *L, int maxsz) {//初始化 
        L->Maxsz = maxsz;
        L->data = (int*)malloc(sizeof(int)*maxsz);//动态分配存储空间,相当于 new
        L->len = 0;
    }

    增删改查插

    int AddList(SeqList *L, int x) { //增加
        if(L->len >= L->Maxsz) {
            return 0;
        }
        L->data[L->len] = x;
        L->len++;
        return 1;
    }
    
    int DelList(SeqList *L, int index) {//删除
        if(index >= L->Maxsz) {
            return 0;
        }
        int  i=0;
        for(i = index; i < L->Maxsz; i++) {
            L->data[i] = L->data[i+1];
        }
        L->len--;
        return 1;
    }
    
    int Update(SeqList *L, int oldda, int newda) {//修改
        int i,flag = 0;
        for(i = 0; i < L->Maxsz; i++) {
            if(L->data[i] == oldda) {
                flag = 1;
                break;
            }
        }
        if(flag == 1) {
            L->data[i] = newda;
            return 1;
        } else {
            return 0;
        }
    }
    
    int Insert(SeqList *L, int index, int data) { //插入1
        int i;
        int len = L->len - 1;
        if(len+1 > L->Maxsz) {
            return 0;
        }
        for(i = len; i >= index; i--) {
            L->data[i+1] = L->data[i];
        }
        L->data[index] = data;
        L->len++;
        return 1;
    }
    
    int InsertList(SeqList *L, int index, int data) {//插入2
        int i;
        if(index < 0 || index > L-> len - 1) {
            return 0;
        }
        if(L->len == L->Maxsz) {
            return 0;
        }
        for(i=L->len-1; i>=index; i--){
            L->data[i+1] = L->data[i];
        }
        L->data[index] = data;
        L->len++;
        return 1;
    }

    还有一些小方法,销毁,取长,清空

    void DestoryList(SeqList *L) {//销毁顺序表 
        free(L->data);
    }
    
    int ListLength(SeqList *L) {//获取长度 
        return L->len;
    }
    
    void ClearList(SeqList *L) {//清空顺序表 
        L->len=0;
    }

    全部代码

    #include<stdio.h>
    
    typedef struct {
        int *data;
        int Maxsz;
        int len;
        
    } SeqList;
    
    void DestoryList(SeqList *L) {//销毁顺序表 
        free(L->data);
    }
    
    int ListLength(SeqList *L) {//获取长度 
        return L->len;
    }
    
    void ClearList(SeqList *L) {//清空顺序表 
        L->len=0;
    }
    
    void InitList (SeqList *L, int maxsz) {//初始化 
        L->Maxsz = maxsz;
        L->data = (int*)malloc(sizeof(int)*maxsz);//动态分配存储空间,相当于 new
        L->len = 0;
    }
    
    int AddList(SeqList *L, int x) { //增加
        if(L->len >= L->Maxsz) {
            return 0;
        }
        L->data[L->len] = x;
        L->len++;
        return 1;
    }
    
    int DelList(SeqList *L, int index) {//删除
        if(index >= L->Maxsz) {
            return 0;
        }
        int  i=0;
        for(i = index; i < L->Maxsz; i++) {
            L->data[i] = L->data[i+1];
        }
        L->len--;
        return 1;
    }
    
    int Update(SeqList *L, int oldda, int newda) {//修改
        int i,flag = 0;
        for(i = 0; i < L->Maxsz; i++) {
            if(L->data[i] == oldda) {
                flag = 1;
                break;
            }
        }
        if(flag == 1) {
            L->data[i] = newda;
            return 1;
        } else {
            return 0;
        }
    }
    
    int Insert(SeqList *L, int index, int data) { //插入1
        int i;
        int len = L->len - 1;
        if(len+1 > L->Maxsz) {
            return 0;
        }
        for(i = len; i >= index; i--) {
            L->data[i+1] = L->data[i];
        }
        L->data[index] = data;
        L->len++;
        return 1;
    }
    
    int InsertList(SeqList *L, int index, int data) {//插入2
        int i;
        if(index < 0 || index > L-> len - 1) {
            return 0;
        }
        if(L->len == L->Maxsz) {
            return 0;
        }
        for(i=L->len-1; i>=index; i--){
            L->data[i+1] = L->data[i];
        }
        L->data[index] = data;
        L->len++;
        return 1;
    }
    
    void display(SeqList *L) {//显示 
        int i;
        for(i=0; i < L->len; i++) {
            printf("%d
    ", L->data[i]);
        }
    }
    
    int main() {
        SeqList sl;
    
        InitList(&sl, 6);
    
        AddList(&sl,0);
        AddList(&sl,1);
        AddList(&sl,2);
        AddList(&sl,3);
        AddList(&sl,5);
    
        Insert(&sl,4,4);
        //AddList(&sl,5);
        //Update(&sl, 5, 6);
        //DelList(&sl,4);
    
        display(&sl);
        return 0;
    }
    View Code
  • 相关阅读:
    学 Win32 汇编[28]
    C#将数据集DataSet中的数据导出到EXCEL文件的几种方法
    FFmpeg 学习(四):FFmpeg API 介绍与通用 API 分析
    Android 代码混淆配置总结
    Android 视频播放器 (三):使用NBPlayer播放直播视频
    Android 视频播放器 (二):使用MediaPlayer播放视频
    Android 展示控件之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
    Android 视频播放器 (一):使用VideoView播放视频
    JavaCV 学习(二):使用 JavaCV + FFmpeg 制作拉流播放器
    Android Studio 常见问题及解决方法
  • 原文地址:https://www.cnblogs.com/hardhp74520/p/11594409.html
Copyright © 2020-2023  润新知