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

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<assert.h>
    #include<memory.h>
    
    
    typedef struct seqlist 
    {
        int arr[10];   //首元素地址
        int capacity;  //数组一共能容纳多少数据。sizeof(arr)/sizeof(arr[0])
        int size;      //统计数组现在已经放进去多少数据,size值的范围  [0,capacity]
    }seqlist;          //数组元素下标的最大值  capacity-1
    
    顺序表:表现一般是数组,地址连续的存储单元依次存储数据元素。arr[10]
    长度是固定的,在分配内存之前要确定数组的长度   n=sizeof(arr) / sizeof(arr[0])
    存储空间连续,允许随机访问,即访问任何下标的地方都可以   [0,n)
    使用索引(下标)访问元素  arr[index]
    
    插入元素,要判断是否超出数组下标。超出则申请二倍长度的新空间,再数据复制到新空间
    每超出,如果是将k插入到链表末尾:
    int main()
    {
        int arr[10] = { 1, 2, 3, 4 };
        seqlist* Seqlist;
    
        Seqlist->arr[9] = k;
        Seqlist->capacity = sizeof(arr) / sizeof(arr[0]);
        Seqlist->size = 0;
        Seqlist->size++;
    }
    
    void print(int arr[], int size)
    {
        assert(arr != NULL);
    
        for (int i = 0; i < size; i++)
        {
            printf("%d ", arr[i]);
        }
        printf("
    ");
    }
    typedef struct seqlist
    {
        int arr[10];  //首元素地址
        int capacity;  //数组一共能容纳多少数据。sizeof(arr)/sizeof(arr[0])
        int size;      //统计数组现在已经放进去多少数据,size值的范围  [0,capacity]
    }seqlist;               //数组元素下标的最大值  capacity-1
    
    
    void InitSeqlist(seqlist* Seqlist)
    {
        assert(Seqlist != NULL);
    
        
        int L = sizeof(Seqlist->arr) / sizeof(Seqlist->arr[0]);
        Seqlist->capacity = L;
        Seqlist->size = 0;
        for (int i = 0; i < L-3; ++i)
        {
            Seqlist->arr[i] = i;
            Seqlist->size++;
        }
        
        
    }
    
    
    void pushbackSeqlist(seqlist* Seqlist, int k)
    {
        assert (Seqlist != NULL);
        Seqlist->arr[Seqlist->size] = k;
        Seqlist->size++;
    }
    
    void pushfrontSeqlist(seqlist* Seqlist,int y)
    {
        assert(Seqlist != NULL);
        for (int i = Seqlist->size; i > 0; i--)
        {
            Seqlist->arr[i] = Seqlist->arr[i - 1];
        }
        Seqlist->arr[0] = y;
        Seqlist->size++;
    
    }
    
    void pushMidSeqlist(seqlist* Seqlist, int z, int index)
    {
        int i = 0;
        for (i = Seqlist->size; i >= index; --i)
        {
            Seqlist->arr[i] = Seqlist->arr[i-1];
        }
        Seqlist->arr[index] = z;
        Seqlist->size++;
    }
    
    void searchSeqlist(seqlist* Seqlist, int y)
    {
        int i = 0;
        while (i<Seqlist->size)
        {
            if (Seqlist->arr[i] != y)
            i++;
            if (Seqlist->arr[i] == y)
            {
                printf("%d的下标是%d
    ", y, i);
                break;
            }
            else
                i++;
    
        }
    
        if(i >= Seqlist->size)
        printf("找不到
    ");
    }
    
    void SeqListPopFront(seqlist *Seqlist) 
    {
        assert(Seqlist->size > 0);
        for (int i = 0; i <= Seqlist->size - 2; i++) {
            Seqlist->arr[i] = Seqlist->arr[i + 1];
        }
        Seqlist->size--;
    }
    
    void SeqListPopBack(seqlist *Seqlist)
    {
        assert(Seqlist->size > 0);
        Seqlist->size--;
    }
    
    void SeqListErase(seqlist *Seqlist, int index) 
    {
        assert(Seqlist->size > 0);
    
        for (int i = index; i <= Seqlist->size - 2; i++) {
            Seqlist->arr[i] = Seqlist->arr[i + 1];
        }
    
        Seqlist->size--;
    }
    
    void SeqListRemove(seqlist *Seqlist, int data) 
    {
        int i = 0;
        for (i = 0; i < Seqlist->size; i++)
        {
            if (Seqlist->arr[i] == data)
            {
                break;
            }
        }
        for (int index = i; index <= Seqlist->size - 2; i++)
            {
                Seqlist->arr[i] = Seqlist->arr[i + 1];
            }
    
            Seqlist->size--;
    }
    
    
    int SeqListSize(seqlist* Seqlist)
    {
        assert(Seqlist->size != 0);
        return Seqlist->size;
    }
    
    int SeqListCapacity(seqlist* Seqlist)
    {
        assert(Seqlist->capacity != 0);
        return Seqlist->capacity;
    }
    
    void SeqListEmptyCheck(seqlist* Seqlist)
    {
        if (Seqlist->size == 0)
        {
            printf("链表为空
    ");
        }
    
        else
            printf("链表不为空
    ");
    }
    
    int SeqListFront(seqlist* Seqlist)
    {
        return Seqlist->arr[0];
    }
    
    int SeqListBack(seqlist* Seqlist)
    {
        return Seqlist->arr[Seqlist->size - 1];
    }
    
    void SeqListDestroy(seqlist * Seqlist) 
    {
        free(Seqlist->arr);
        
        Seqlist->capacity = 0;
        Seqlist->size = 0;
    }
    
    void addCapacitySeqlist(seqlist* Seqlist)
    {
        seqlist*Seqlist2 = malloc(2 * sizeof(int)*(Seqlist->capacity));
        for (int i = 0; i < Seqlist->size; i++)
        {
            Seqlist2->arr[i] = Seqlist->arr[i];
        }
        memcpy(Seqlist2,Seqlist,Seqlist->capacity);
        Seqlist2->capacity = 2 * (Seqlist->capacity);
        print(Seqlist2->arr, Seqlist2->capacity);
    
        seqlist *a=Seqlist;
        Seqlist = Seqlist2;
        Seqlist->capacity = Seqlist2->capacity;
        print(Seqlist->arr, Seqlist->capacity);
        free(a);
    }
    
    
    
    int main()
    {
        seqlist a;
        seqlist* Seqlist;
        Seqlist = &a;
    
        int arr[10] ;
        int k = 8;
        int y = 7;
        int z = 9;
        int index = 5;
        seqlist* Seqlist = malloc(sizeof(int)* 10);
        
        InitSeqlist(Seqlist);
        print(Seqlist->arr, Seqlist->capacity);
    
        pushbackSeqlist(Seqlist,k);
        print(Seqlist->arr, Seqlist->capacity);
    
        pushfrontSeqlist(Seqlist, y);
        print(Seqlist->arr, Seqlist->capacity);
    
        pushMidSeqlist(Seqlist, z, index);
        print(Seqlist->arr, Seqlist->capacity);
    
        searchSeqlist(Seqlist,5);
    
        SeqListPopFront(Seqlist);
    
        SeqListPopBack(Seqlist);
    
        SeqListErase(Seqlist,index);
    
        int ret=SeqListSize(Seqlist);
    
        int Scapacity=SeqListCapacity(Seqlist);
    
        SeqListEmptyCheck(Seqlist);
    
        int FirstData = SeqListFront(Seqlist);
    
        int LastData = SeqListBack(Seqlist);
    
        SeqListDestroy(Seqlist);
    
    
    
        Seqlist->size = 11;
        if (Seqlist->size > Seqlist->capacity)
        addCapacitySeqlist(Seqlist);
        print(Seqlist->arr, Seqlist->capacity);
    
    
        system("pause");
        Seqlist->arr[9] = k;
        Seqlist->capacity = sizeof(arr) / sizeof(arr[0]);
        Seqlist->size = 0;
        Seqlist->size++;
        return 0;
    }
    住进火焰就成为萤火虫。
  • 相关阅读:
    抽象工厂与工厂方法的区别
    工作那些年的事兒
    抽象工廠與工廠方法的區別
    Dot Net设计模式—MVC模式
    Log4Net配置
    FileStream的使用
    asp.net用户检测的两种方式
    SWFUpload无刷新文件批量上传
    页面生命周期
    Lambda表达式与匿名方法
  • 原文地址:https://www.cnblogs.com/fengkun/p/11247852.html
Copyright © 2011-2022 走看看