数据结构的顺序表

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//构造顺序表类型
#define SIZE 10
typedef int data_t;   //
typedef struct list{
    data_t data[SIZE];  //
    int last;          //
}seqlist;

//创建或申请顺序表及初始化
seqlist * create_seqlist()
{
    seqlist *seq = (seqlist *)malloc(sizeof(seqlist));
    if(NULL == seq) return NULL;
    //初始化
    memset(seq->data, 0, sizeof(seq->data));  //清空申请的空间  
    seq->last = -1;         //表示空
    
    return seq; 
}

//判空
int seqlist_is_empty(seqlist *seq)
{
    //1、判断seq
    if(NULL == seq) return -1;
    //2、判断空
    return ((seq->last == -1)?1:0);
}
//判满
int seqlist_is_full(seqlist *seq)
{
    //1、判断seq
    if(NULL == seq) return -1;
    //2、判断满
    return ((seq->last == SIZE -1)?1:0);
}
//求表长
int get_length_seqlist(seqlist *seq)
{
    //1、判断seq
    if(NULL == seq) return -1;
    //2、判断空
    return ((seq->last + 1));
}
//按位置增加


int insert_by_pos_seqlist(seqlist *seq, int pos, data_t data )
{
    //判断seq
    if(NULL == seq) return -1;
    //判满
    if(1 == seqlist_is_full(seq)) return -1;
    //判断位置合法性
    int len = get_length_seqlist(seq); 
    if(pos < 0 || pos > len)  return -1;
    //给pos 挪位置
    int i;
    for(i=seq->last; i >= pos; i--)
    {
        seq->data[i+1] = seq->data[i]; //挪位置
    }
    //插入数据
    seq->data[pos] = data;  // 
    //last++
    seq->last++; 
    return 0;
}
//按位置删除
int del_by_pos_seqlist(seqlist *seq, int pos )
{
    //判断seq
    if(NULL == seq) return -1;
    //判空
    if(1 == seqlist_is_empty(seq)) return -1;
    //判断位置合法性
    int len = get_length_seqlist(seq); 
    if(pos < 0 || pos > len-1)  return -1;    //0-len-1
    //通过挪动 删除
    int i;
    for(i=pos; i <= seq->last; i++)
    {
        seq->data[i] = seq->data[i+1]; //后往前挪
    }
    //last--
    seq->last--; 
    return 0;
}

//按位置查询
data_t find_by_pos_seqlist(seqlist *seq, int pos)
{
    //判seq 
    if(NULL == seq) return -1;
    //判空
     if(1 == seqlist_is_empty(seq)) return -1;
    return seq->data[pos]; 
}
//按位置修改
int change_by_pos_seqlist(seqlist* seq, int pos, data_t new_vlu)
{
    //判seq
    if(NULL == seq) return -1;
    //判空
     if(1 == seqlist_is_empty(seq)) return -1;
    seq->data[pos] = new_vlu;
    return 0; 
}
//按值查询/修改(拓展)

int find_by_data_seqlist(seqlist *seq,data_t vlu)

{

//判空
    if(1 == seqlist_is_empty(seq)) return -1;
    //判断位置合法性
    int len = get_length_seqlist(seq); 
    if(pos < 0 || pos > len-1)  return -1;    //0-len-1

int i;

for (i=0; i<=seq->last;i++)

{

if(vlu==seq->data[i])

return i;

}

int chang
//排序
//打印表
void show_seqlist(seqlist *seq)
{
    //判断seq
     if(NULL == seq) return -1;
    //判断 空
     if(1 == seqlist_is_empty(seq)) return -1;
    //循环遍历打印
    int i;
    for(i=0; i<=seq->last; i++)
    {
        printf("%d ",seq->data[i]); 
    }
    printf("\n");
    
}
//销毁表
void  destory_seqlist(seqlist **p)
{

    free(*p);  //真正销毁表和头  
}


int main(int argc,const char *argv[])
{
    seqlist *seq= create_seqlist(); 
    if(NULL == seq) 
    {
        perror("create_seqlist error");
        return -1;
    }
    printf("create_seqlist  ok\n");

    //插入 5 个
    int i; 
    for(i=0; i< 5; i++)
    {
        insert_by_pos_seqlist(seq, i, i+1); 
    }
    show_seqlist(seq); 

    //删除一个
    int ret = del_by_pos_seqlist(seq,3); 
    if(-1 == ret)
    {
        perror("删除失败\n");
        return -1;
    }
    show_seqlist(seq); 
    //查询 2 的值
    data_t  vlu = find_by_pos_seqlist(seq, 2); 
    printf("%d\n", vlu); 
    //修改 2 位置的只为 666
    change_by_pos_seqlist(seq, 2, 666);
    show_seqlist(seq);
    //

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值