C语言:【动态顺序表】动态顺序表的在指定位置插入元素Insert,以及指定元素Find

原创 2016年05月30日 17:17:30
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<malloc.h>
typedef int DateType;
typedef struct SeqList
{
    DateType *arr;
    size_t capacility;
    size_t size;
}SeqList;

//创建空间
void CheckCapa(SeqList *Seq)
{
    assert(Seq);
    if (Seq->size >= Seq->capacility)
    {
        Seq->capacility = 2 * Seq->capacility + 3;
        Seq->arr = (DateType*)realloc(Seq->arr, Seq->capacility * sizeof(DateType));
    }
}

//初始化动态顺序表
void initSeqList(SeqList *Seq)
{
    Seq->arr = NULL/* malloc(sizeof(DateType) * 3)*/;
    Seq->capacility = 0;
    Seq->size = 0;
}

//销毁空间
void DestroySeq(SeqList *Seq)
{
    
    Seq->capacility = 0;
    Seq->size = 0;
    free(Seq->arr);
    Seq->arr = NULL;

}


//尾插
void PushBack(SeqList *Seq,DateType x)
{
    assert(Seq);
    CheckCapa(Seq);
    
    Seq->arr[Seq->size++] = x;
}


//插入
void Insert(SeqList *Seq,size_t pos, DateType x)
{
    assert(Seq);
    assert(pos < Seq->size);
    CheckCapa(Seq);
//思路:插入时将pos+1之后元素往后移腾出一个位置,pos位置放入x。
//鉴于标号从0开始,先移动再加加size。
    int index = Seq->size;
    for (; index >= pos + 1;index--)
    {
        Seq->arr[index] = Seq->arr[index - 1];
    }
    Seq->arr[pos] = x;
    Seq->size++;
}

//查找
int Find(SeqList *Seq, DateType x)
{
    assert(Seq);
    int index = 0;
    for (; index < Seq->size; index++)
    {
        if (Seq->arr[index] == x)
        {
            return index;
        }
    }
    return -1;
}


//打印动态顺序表
void PrintSeq(SeqList *Seq)
{
    assert(Seq);
    int index = 0;
    if (Seq->size == 0)
    {
        printf("当前顺序表为空!\n");
        return;
    }
    for (index = 0; index < Seq->size; index++)
    {
        printf("%d->", Seq->arr[index]);
    }

    printf("\n");
}


void Test()
{
    SeqList Seq;
    initSeqList(&Seq);
    PushBack(&Seq, 1);
    PushBack(&Seq, 2);
    PushBack(&Seq, 3);
    PushBack(&Seq, 4);
    PrintSeq(&Seq);

    Insert(&Seq, 2, 10);
    PrintSeq(&Seq);

    int ret = Find(&Seq, 20);
    if (ret == -1)
    {
        printf("not exist!\n");
    }
    else
    {
        printf("%d\n");
    }
    DestroySeq(&Seq);
}


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1743523

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数组顺序表初始化、特定位置插入元素、删除特定值等操作

第二篇博客

c语言:顺序表的实现(三)将元素e插入到一个递减有序表中,不改变顺序表的递减有序性。

#include #include #define LIST_INIT_SIZE 100 using namespace std; struct Node { int *elem; int Le...

《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)

最近在读《数据结构、算法与应用》这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还...

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3….an)链式...

C语言实现动态顺序表

1、用于存放声明的头文件#pragma once //避免重复引入头文件,作用于预编译指令几乎相同#define _CRT_SECURE_NO_WARNINGS 1 #include #inclu...

C语言实现动态顺序表

C语言实现动态顺序表

数据结构C语言版--动态顺序表的基本功能实现(二)

/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用"->" * malloc(...
  • T_P_F
  • T_P_F
  • 2017-05-20 23:42
  • 280

c语言顺序表动态实现

动态版与静态版区别:当插入数据时内存空间不够时,动态版的顺序表可以再重新开辟一块更大的空间用来存放数据。 顺序表的优缺点:顺序表的优点是便于随机存储,缺点是不便于插入删除等操作,因为插入删除一个元素...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)