顺序表的增删改查

#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct seqlist //封装顺序表结构体类型
{
    int data[N]; //用来存数据的数组
    int last;    //代表数组中最后一个有效元素的下标
} seqlist_t, *seqlist_p;

// 创建一个空的顺序表
seqlist_p CreateEpSeqlist() //create创造 empty 空的 seqlist顺序表
{
    //动态申请一块顺序表结构体大小空间
    seqlist_p p = (seqlist_p)malloc(sizeof(seqlist_t));
    if (NULL == p)
    {
        perror("malloc lost"); //perror打印上一个函数报的错误信息
        return NULL;           //错误情况让函数返回空指针
    }
    //对结构体初始化
    p->last = -1;

    return p;
}

//判断顺序表是否为满,满返回1,未满返回0
int IsFullSeqlist(seqlist_p p) //full满
{
    return p->last + 1 == N;
}

//向顺序表的指定位置插入数据
int InsertIntoSeqlist(seqlist_p p, int post, int data)
{
    //容错判断:判满,对post做判断
    if (IsFullSeqlist(p) || post < 0 || post > p->last + 1)
    {
        printf("InsertIntoSeqlist err\n");
        return -1; //错误返回
    }
    //让最后一个元素到插入位置的元素向后移动一个单位
    for (int i = p->last; i >= post; i--)
        p->data[i + 1] = p->data[i];
    //插入数据
    p->data[post] = data;
    //让last加一
    p->last++;
    return 0;
}

//遍历顺序表sequence顺序list表
void ShowSeqlist(seqlist_p p)
{
    for (int i = 0; i <= p->last; i++)
        printf("%d ", p->data[i]);
    printf("\n");
}

//判断顺序表是否为空,为空返回1,不为空返回0
int IsEpSeqlist(seqlist_p p)
{
    return p->last == -1;
}

//删除顺序表中指定位置的数据,post为删除位置
int DeleteIntoSeqlist(seqlist_p p, int post)
{
    //容错判断:判空,对post判断
    if (IsEpSeqlist(p) || post < 0 || post > p->last)
    {
        printf("DeleteIntoSeqlist err\n");
        return -1;
    }

    //从删除位置元素的后一个元素到最后一个元素向前移动一个单位
    for (int i = post + 1; i <= p->last; i++)
        p->data[i - 1] = p->data[i];

    //让last减一,因为删除了一个元素有效元素少了一个
    p->last--;

    return 0;
}

// 修改指定位置上数据
int ChangePostSeqList(seqlist_p p, int post, int data)
{
    //容错判断:判空,对post判断
    if (IsEpSeqlist(p) || post < 0 || post > p->last)
    {
        printf("ChangePostSeqList err\n");
        return -1;
    }

    //修改指定位置数据
    p->data[post] = data;

    return 0;
}

// 查找指定数据出现的位置,返回下标,未找到返回-1
int SearchDataSeqList(seqlist_p p, int data)
{
    for (int i = 0; i <= p->last; i++)
    {
        if (p->data[i] == data)
            return i;
    }
    return -1;
}

// 清空顺序表(清空:访问不到,但是内存中还有。销毁:内存清空)
void ClearSeqList(seqlist_p p)
{
    p->last = -1;
}

int main(int argc, char const *argv[])
{
    seqlist_p p = CreateEpSeqlist();
    InsertIntoSeqlist(p, 0, 10);
    InsertIntoSeqlist(p, 1, 20);
    InsertIntoSeqlist(p, 2, 30);
    ShowSeqlist(p);

    DeleteIntoSeqlist(p, 1);
    ShowSeqlist(p);

    ChangePostSeqList(p, 0, 99);
    ShowSeqlist(p);

    printf("search 99:%d\n", SearchDataSeqList(p, 99));
    return 0;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的在 C# Winform 窗体中实现顺序表增删改查的实例: 1. 首先,在你的 Winform 窗体中添加四个 TextBox 控件和四个 Button 控件,分别用于输入元素、输入要删除的元素位置、输入要修改的元素位置和输入新值,以及按钮事件。 2. 接下来,在窗体的 Load 事件中,声明一个 List<int> 类型的变量来存储顺序表中的元素: ``` List<int> array = new List<int>(); ``` 3. 实现插入元素的方法。在 button1_Click 事件中,通过 TextBox 控件获取要插入的元素值,并调用 List 类型的 Add 方法将元素插入到顺序表中: ``` private void button1_Click(object sender, EventArgs e) { int value = int.Parse(textBox1.Text); array.Add(value); // 更新 DataGridView 控件中的数据 dataGridView1.DataSource = null; dataGridView1.DataSource = array; } ``` 4. 实现删除元素的方法。在 button2_Click 事件中,通过 TextBox 控件获取要删除的元素位置,然后调用 List 类型的 RemoveAt 方法删除指定位置的元素: ``` private void button2_Click(object sender, EventArgs e) { int index = int.Parse(textBox2.Text); array.RemoveAt(index); // 更新 DataGridView 控件中的数据 dataGridView1.DataSource = null; dataGridView1.DataSource = array; } ``` 5. 实现修改元素的方法。在 button3_Click 事件中,通过 TextBox 控件获取要修改的元素位置和新值,然后调用 List 类型的 indexer 语法修改指定位置的元素: ``` private void button3_Click(object sender, EventArgs e) { int index = int.Parse(textBox3.Text); int value = int.Parse(textBox4.Text); array[index] = value; // 更新 DataGridView 控件中的数据 dataGridView1.DataSource = null; dataGridView1.DataSource = array; } ``` 6. 实现查找元素的方法。在 button4_Click 事件中,通过 TextBox 控件获取要查找的元素值,然后调用 List 类型的 FindIndex 方法查找元素的位置: ``` private void button4_Click(object sender, EventArgs e) { int value = int.Parse(textBox5.Text); int index = array.FindIndex(x => x == value); if(index >= 0) { MessageBox.Show($"元素 {value} 的位置是:{index}"); } else { MessageBox.Show($"元素 {value} 不存在!"); } } ``` 以上就是一个简单的在 C# Winform 窗体中实现顺序表增删改查的实例。你可以将这些方法放在一个类中,并在 Winform 中调用这个类来操作顺序表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值