数据结构之顺序表(纯代码)

大致函数列表

#ifndef _ARRAY_H
#define _ARRAY_H

#define SIZE 1024

typedef int arr_t;

typedef struct array{
    arr_t data[SIZE];
    int len;
}arr_node, *arr_pnode;

//创建空间
arr_pnode create_arr(void);
//判断是否会溢出
int full(arr_pnode array);
//罗列
void show(arr_pnode array);
//增加
int insert(arr_pnode array, arr_t num, arr_t loc);
//删除
int removal(arr_pnode array, arr_t loc);
//修改
int change(arr_pnode array, arr_t num, arr_t loc);
//查找
int find_loc(arr_pnode array, arr_t loc);
int find_num(arr_pnode array, arr_t num);
//销毁
int destroy(arr_pnode *array);

#endif

1、表的创建

arr_pnode create_arr(void)
{
    arr_pnode temp = (arr_pnode)malloc(sizeof(arr_node));
    if(NULL == temp)
    {
        return NULL;
    }
    temp->len = 0;
    return temp;
};

2、增

int insert(arr_pnode array, arr_t num, arr_t loc)
{
    if(loc < 0 && loc > SIZE)
        return -1;
    if(loc > array->len)
        return -2;
    if(full(array) != 0 )
        return 1;
    
    for (int i = array->len-1; i > loc-1; i--) {
        array->data[i+1] = array->data[i];
    }
    array->data[loc] = num;
    array->len++;
    return 0;
};

3、删

int removal(arr_pnode array, arr_t loc)
{
    if(loc < 0 || loc > array->len-1)
        return -1;
    for (int i = loc; i < array->len-1; i++) {
        array->data[i] = array->data[i+1];
    }
    array->data[array->len-1] = 0;
    array->len--;
    return 0;
};

4、改

int change(arr_pnode array, arr_t num, arr_t loc)
{
    if(loc < 0 || loc > array->len-1)
        return -1;
    array->data[loc] = num;
    return 0;
};

5、查(按位置查)(按内容查)

int find_loc(arr_pnode array, arr_t loc)
{
    printf("-->%d\n",array->data[loc]);
    return 0;
};
//查找内容
int find_num(arr_pnode array, arr_t num)
{
    printf("-->");
    for(int i = 0; i < array->len-1; i++)
    {
        if(array->data[i] == num)
        {
            printf("%d ",i);
        }
    }
    puts("");
    return 0;
};

6、判满(增前需判断)

int full(arr_pnode array)
{
    if( array->len > (SIZE-1) )
        return -1;
    return 0;
};

7、销毁

int  destory(arr_pnode *array)
{
    free(*array);
    *array = NULL;
    return 0;
};

8、代码

#ifndef _ARRAY_H
#define _ARRAY_H

#define SIZE 1024

typedef int arr_t;

typedef struct array{
    arr_t data[SIZE];
    int len;
}arr_node, *arr_pnode;

//创建空间
arr_pnode create_arr(void);
//初始化
void start(arr_pnode array);
//判断是否会溢出
int full(arr_pnode array);
//罗列
void show(arr_pnode array);
//增加
int insert(arr_pnode array, arr_t num, arr_t loc);
//删除
int removal(arr_pnode array, arr_t loc);
//修改
int change(arr_pnode array, arr_t num, arr_t loc);
//查找
int find_loc(arr_pnode array, arr_t loc);
int find_num(arr_pnode array, arr_t num);
//销毁
int destroy(arr_pnode *array);

#endif

//-------------------------
#include <stdio.h>
#include <stdlib.h>
#include "array.h"

arr_pnode create_arr(void)
{
    arr_pnode temp = (arr_pnode)malloc(sizeof(arr_node));
    if(NULL == temp)
    {
        return NULL;
    }
    temp->len = 0;
    return temp;
};

void start(arr_pnode array)
{
    arr_t temp = SIZE;
    while (--temp != 0) {
        array->data[temp] = temp;
    }
    array->data[0] = 0;
    array->len = SIZE-1;
};

void show(arr_pnode array)
{
    for(int i = 0; i < array->len; i++ )
    {
        printf("%d,\n",array->data[i]);
    }
};
//判满
int full(arr_pnode array)
{
    if( array->len > (SIZE-1) )
        return -1;
    return 0;
};
//增加
int insert(arr_pnode array, arr_t num, arr_t loc)
{
    if(loc < 0 && loc > SIZE)
        return -1;
    if(loc > array->len)
        return -2;
    if(full(array) != 0 )
        return 1;
    
    for (int i = array->len-1; i > loc-1; i--) {
        array->data[i+1] = array->data[i];
    }
    array->data[loc] = num;
    array->len++;
    return 0;
};
//删除
int removal(arr_pnode array, arr_t loc)
{
    if(loc < 0 || loc > array->len-1)
        return -1;
    for (int i = loc; i < array->len-1; i++) {
        array->data[i] = array->data[i+1];
    }
    array->data[array->len-1] = 0;
    array->len--;
    return 0;
};

//修改
int change(arr_pnode array, arr_t num, arr_t loc)
{
    if(loc < 0 || loc > array->len-1)
        return -1;
    array->data[loc] = num;
    return 0;
};
//查找
int find_loc(arr_pnode array, arr_t loc)
{
    printf("-->%d\n",array->data[loc]);
    return 0;
};
int find_num(arr_pnode array, arr_t num)
{
    printf("-->");
    for(int i = 0; i < array->len-1; i++)
    {
        if(array->data[i] == num)
        {
            printf("%d ",i);
        }
    }
    puts("");
    return 0;
};
//销毁
int  destory(arr_pnode *array)
{
    free(*array);
    *array = NULL;
    return 0;
};



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值