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...

JavaScript 元素的插入顺序以及动态加载js

*****************记录下今天的心得*****************   1.元素的插入顺序 需求:异步从后台读取两个数据a和b,并动态加载到父容器x中,要求a必须在b的左边 ...

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

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

C语言实现一个动态内存的顺序表

1.顺序表的概念          顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中...

C语言实现通讯录—动态顺序表

之前我有一篇博客写的是静态顺序表实现通讯录,但是静态顺序表有一个很大的缺陷就是,如果存满了,就不能在继续存储了。 为了改进之前的版本,本次将实现动态顺序表的通讯录,可以动态开辟空间,不用担心空间存储...
  • DY_1024
  • DY_1024
  • 2017年12月14日 15:03
  • 14

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

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

利用C语言实现动态顺序表

利用C语言实现动态顺序表1. 数据类型及动态分配顺序存储结构#define INIT_SIZE 10                           //当前默认有效值#define DEFAUL...
  • Comedly
  • Comedly
  • 2016年08月01日 00:32
  • 276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:【动态顺序表】动态顺序表的在指定位置插入元素Insert,以及指定元素Find
举报原因:
原因补充:

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