【数据结构】顺序表C语言代码参考(适合新手,带注释)

【数据结构】顺序表C语言代码参考(适合新手,带注释)

顺序表的结构定义

typedef struct Slist
{
	int * data; //使用指针(数组)存放
    int maxsize;//定义顺序表的最大数量
    int longth; //表示当前顺序表存放元素的数量
}

顺序表初始化的代码

void initslist(sql *l)
{
    l->data = (int *)malloc(sizeof(int)*10); //给数据分配空间,数量为int类型字节乘10,格式为整数指针
    l->maxsize = 10; //初始分配空间为10个整数
    l->length = 0; //表中无元素
}

顺序表查找的代码

void find(sql *l,int number) //遍历数据,匹配输出即可,同理可以直接打印内容
{
	for(int i=0;i<l->length;i++){
		if(l->data[i]==number){
			printf("已找到数据,位于第%d位置\n",i);
		}
	}
}

顺序表数据添加的代码

void add(sql *l) //这里的添加指的是从刚刚初始化后的表进行添加数据
{
    for(i=0; i<l->maxsize; i++)  //做一个顺序表的遍历,按顺序填充数据
    {
        a = 0;
        scanf("%d",&a);
        //在这里要做一个停止选项,防止用户不想填充所有的元素位置
        if(a!=-1) //当用户输入不是-1是,才进行数据填充
        {
            l->data[i] = a; //将第i个元素赋值为a
            l->length++; //此时添加了一个数值,表实际长度加1
        }
        else
        {
            break; //直接中止函数
        }
	}
}

顺序表插入代码

void insert(sql *l, int number, int index) 
    //插入是指在已经存在数据的表中,再在想要的位置添加数据,可以中间插入,也可以前后插入
    //此处的index是数学意义上的第几位
{
    if(l->length==l->maxsize)
        break; 					//此处为防止数量超出界限,对于已经满的表无法插入
    if(index == maxsize-1)
    {
        l->data[index] == number; //如果插入的位置位于末尾,那么可以直接添加进入,不需要麻烦的操作
    	break;
    }
    for(i=length; i>index-1; i--) //从最后一位开始,此处的最后一位是已有数据的下一位
    {
        l->data[i]=l->data[i-1]; //每一位的值都等于前一位的值,相当于是前面的逐个向后移动,一直到需要插入的位置
	}
    l->data[index-1] == number;  //此时将需要插入的输入直接存放到那个位置即可
}

顺序表按位删除的代码

void delete_index (sql *l,int index)
    //顺序表的删除需要将后续数字全部向前移动,只需要告诉系统表中少一项数据即可
{
    for(i=index-1;i<l->length-1;i++) //进行遍历,直到最后一位,原来数据的最后一位可以不用管,只需要声明,此处可存
    {
        l->data[i]==l->data[i+1];
    }
    l->length--;
}

顺序表按值删除的代码

void delete_value (sql *l,int number)
{
    for(i=0;i<l->length;i++)
    {
        if(l->data[i]==number)
        {
            for(j=i;j<l->length-1;j++) //和按位删除同理,多了一步找位
    		{
        		l->data[j]==l->data[j+1];
    		}
            l->length--;
        }
    }
}

顺序表长度增加的代码

void increase (sql *l,int len)
    //顺序表长度增加就像屋子装修,需要将原来房间的东西先搬到一个地方,等装好了在放回去
{
    *p = l->data; //这一步是将东西搬出去
    l->data = (ini *)malloc(sizeof(int)*(l->maxsize+len)); //这一步是装修房子,分配一个新的长度
    
    for(i=0;i<l->length;i++) //搬家要一个一个搬到原来位置上,不能一窝子塞进去,会破坏新建的房子
    {
        l->data[i]==p[i];//p是一个指针和data一样,通过数组存放;
	}
    free(p); //这里我们需要声明p不用了,释放掉他
    l->maxsize = l->maxsize + len; //表的最大大小不要忘记改
}

本内容是本人亲自编写整理,如有不足请多多指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值