数据结构关于顺序表的操作()

数据结构对顺序表的注释详解:

#include <stdio.h>
#define LIST_INIT_SIZE  100   // 线性表存储空间的初始分配量
#define LISTINCREMENT   10    // 线性表存储空间的分配增量
//设置表的基础属性:
typedef struct {
	ElemType* elem;          //存储空间头地址
		int length;          //当前长度
		int listsize;       // 当前分配的存储容量(以sizeof(ElemType))为单位
}; SqList;


//建立一个新的表,并且对这个表进行初始化:
Status InitList_Sq(SqList& L){   //Status为返回值。   怎么判断是否用&?看对表的值有没有变化,如果没有就不用&
	//构造一个空的线性表L
	L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
//malloc  开房间   函数后为新开的房间的容量  sizeof为计算ElemType的长度  
    if (!L.elem) exit(OVERFLOW); //开完房间判断是否为空,如果为空则输出OVERFLOW
	L.length = 0;  //空表长度为0
	L.listsize = LIST_INIT_SIZE;//空表初始容量
	return OK;
}//InitList_Sq

//插入实现:
Status ListInstert_Sq(SqList& L, int i, ElemType e) //插入一个元素会对表内进行改变,这个时候需要用&  
//第一个为引用表,向L里写入,第二个是要插入的值的类型,第三个是插入的值
{
	//插入一个值的时候先考虑插入值i的合法性:i应该大于1且小于length所以先对i的值进行一个判定
	if (i < 1 || i > L.lenth + 1) return ERROR;
	//判定之后再考虑第二种情况:如果这个表是满的怎么办?就要新开一个房间供他插入
	if (L.lenth >= L.listsize) {
		newbase = (ElemType*)realloc(L.elem,  //新建的表的首地址
			(L.listsize + LISTINCREMENT) * sizeof(ElemType));
		//增加房间的时候realloc为新建命令 长度为(L.listsize + LISTINCREMENT)也就是原来的的表长加上要新建的表长然后乘以他的内存字节
		if (!newbase) exit(OVERFLOW);//和上面建立新表一样,判断新建表是否为空
		L.elem = newbase; //新的首地址
		L.listsize += LISTINCREMENT; //增加存储容量
	}
	//以上操作都完成时,我们就可以正常插入元素了
	q = &(L.elem[i - 1];//q 为插入位置
	for (p = &(L.elem[L.lengh - 1]); p >= q; --p) *(p + 1) = *p;
	//p赋初值为链表的最后一个元素地址,p>=q表示循环直到p<q的时候结束,--p是使p指针的指向往前移一位
	*q = e;  //插入e
	++ L.lenghth;//表长加1
	return OK;
}//ListInsert_Sq

//接下来我们来做删除的部分
Status ListInstert_Sq(SqList &L, int i, ElemType &e) {
	//在顺序表L中删除第i个元素,并用e返回值
	//接下来我们还是要考虑数据的合法性,关于删除元素i的值的判定
	if ((i < 1) || (i > L.lengh))return ERROR;
	p = &(L.elem[i - 1]);
	e = *p;//删除的值赋给e
	q = L.elem + L.length - 1;//表尾元素位置
	for (++p; p <= q; ++p)*(p - 1) = *p;
	--L.lengh;//表长减一
	return OK;
}//ListInsert_Sq


//最后做一下输出
int main()
{
	SqList SL;   //定义SL
	InitList_Sq(SL);//调用
	ListInsert_Sq(SL, 1, 11);
	ListInsert_Sq(SL, 2, 12);
	ListInsert_Sq(SL, 3, 13);
	ListInsert_Sq(SL, 4, 14);
	ListInsert_Sq(SL, 5, 15);
	int a = LocateElem_Sq(SL, 15);
	printf("第十五个元素的位置是%d\n", a);
	ElemType eee;
	ListDelete_Sq(SL,2,eee);
	GetRlem_Sq(SL, 2, eee);
	printf("2的位置:%d\n", eee);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值