zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    如何获取显示器的EDID信息
    VGA
    RK3288 GMAC整理
    基于嵌入式Linux的千兆以太网卡驱动程序设计及测试
    module_param和module_param_array用法
    OSI七层协议模型、TCP/IP四层模型学习笔记
    999
    git
    最小生成树 (Minimum Spanning Tree,MST) --- Kruskal算法
    并查集 (Disjoint Set)
  • 原文地址:https://www.cnblogs.com/hardhp74520/p/11594409.html
Copyright © 2011-2022 走看看