C语言线性表

线性表

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分量 
#define LISTINCREMENT 10   //线性表存储空间增量(当存储空间不够时使用) 
typedef int ElemType;//元素类型
//声明线性表结构 
typedef struct sqlists{
	ElemType *elem; //其实内存地址 
	int length;     //表当前长度 
	int listsize;   //分配的总长度 
}SqList;
//创建线性表 
int InitList(SqList *L){
	L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if(!L->elem) return -1;
	L->length = 0;
	L->listsize = LIST_INIT_SIZE;
	return 0;
}
//查找元素
int LocateElem(SqList L, ElemType x){
	int pos = -1;
	for(int i = 0; i < L.length; i++){
		if(L.elem[i] == x) pos = i;
	}
	return pos;
} 
//插入元素
int ListInsert(SqList *L, int i, ElemType e){
	if(i<1 || i>L->length+1) return -1;
	if(L->length >= L->listsize){
	ElemType *newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT)*sizeof(ElemType));
	if(!newbase) return -1;
	L->elem = newbase;
	L->listsize += LISTINCREMENT;
}
	ElemType *q, *p;
	q = &(L->elem[i-1]);
	for(p = &(L->elem[L->length-1]); p>=q; --p)
	*(p + 1) = *p;
	*q = e;
	++L->length;
	return 0;
}
//删除元素
int ListDelete(SqList *L, int i, ElemType *e){
	if(i<1 || i>L->length) return -1;
	ElemType *q, *p;
	p = &(L->elem[i -1]); //p为被删除元素的位置 
	*e = *p;//被删除元素赋值给e 
	q = L->elem + L->length -1;//q指向表尾最后一个元素 
	for(++p; p <= q; ++p)
	*(p - 1) = *p;
	--L->length;
	return 0;
}
int main()
{
    SqList list;
    InitList(&list);
    //添加10个数字给线性表list
    for (int i = 0; i < 10; i++)
    ListInsert(&list, i+1, i+1);
    printf("线性表初始化之后\n"); 
	for (int i = 0; i < 10; i++)
    printf("%d ", list.elem[i]);
    //删除第5个
    ElemType e;
    ListDelete(&list, 5, &e);
    printf("\n删除的元素是:%d\n", e);
    //在第2个位置插入一个元素-1
    ListInsert(&list, 2, -1);
    //输出线性表
    for (int i = 0; i < 10; i++)
    printf("%d ", list.elem[i]);
    //输出结果是:1 -1 2 3 4 6 7 8 9 10
    //system("pause");
    return 10086; 
}

【运行结果】
在这里插入图片描述

参考资料
使用C语言实现线性表
顺序表的基本操作(C语言详解版)
链表(单链表)的基本操作及C语言实现
请问c语言中malloc函数和realloc的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

127.0.0.1/24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值