动态创建顺序表,并进行插入删除操作

代码程序:

#include"stdio.h"
#include<iostream>
#include"stdlib.h"
using namespace std;
#define maxsize 10
typedef struct{
    int*elem;
    int length;
    int listsize;
}sqlist;
void initiallist(sqlist *l)//动态的创建一个顺序表
{
    l->elem = (int *)malloc(maxsize*sizeof(int));
    if (!l->elem)
        return;
    l->length = 0;
    l->listsize = maxsize;
}
void insertelem(sqlist*l, int i, int item)//插入一个元素
{
    if (i<1 || i>l->length+1)//判断是否插入非法
    {
        cout << "插入非法" << endl;
        return;
    }
    int*base = 0;
    if (l->length >= l->listsize)//如果元素个数等于最大容量,进行容量扩展,这是动态创建顺序表的好处。
    {
        base = (int*)realloc(l->elem,(maxsize + 10)*sizeof(int));
        l->elem = base;
        l->listsize = maxsize + 10;
    }
    int*p = l->elem + l->length - 1;
    for (; p >= (l->elem + i - 1); p--)//将i位置后每一个元素后移
        *(p + 1) = *p;
    *(l->elem + i - 1) = item;
    l->length++;
}
void deleteelem(sqlist*l, int i)//删除一个元素
{
    if (i<1 || i>l->length)//判断是否删除非法
    {
        cout << "删除非法" << endl;
        return;
    }
    int*p = l->elem + i;
    for (; p <= (l->elem + l->length - 1); p++)//将i位置后每一个元素前移
        *(p - 1) = *p;
    l->length--;
}
int main()
{
    sqlist l;
    initiallist(&l);//初始化链表
    for (int i = 0; i < 15;i++)//插入15个元素
        insertelem(&l, i + 1, i + 1);
    printf("the content of the list is:\n");
    for (int i = 0; i < l.length; i++)
        printf("%d ", l.elem[i]);
    deleteelem(&l, 5);//删除一个元素后
    printf("\ndelete the fifth element\n");
    for (int i = 0; i < l.length; i++)
        printf("%d ", l.elem[i]);

    system("pause");
    return 0;
}

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值