《数据结构:c语言版》(严蔚敏)顺序表线性表

顺序表

#include<stdio.h>
#include<stdlib.h>

#define ok 1
#define error 0
#define  list_init_size    100         //线性表存储空间的初始分配量
#define  listincrement     10			//增加内存空间时的增量
//动态存储的结构定义
typedef int status;
typedef int elemtype;

typedef  struct {
   
	elemtype  *elem;          数组指针表示线性表存储空间的基址
	int length;          //长度   (元素的个数)
	int listsize;            //当前分配的存储容量    
}sqlist;

status initlist_sq(sqlist &l)//初始化线性表
{
   
	l.elem = (elemtype*)malloc(list_init_size*sizeof(elemtype));//l.elem这个指针指向一块通过malloc函数分配的内存地址 
	if (!l.elem)
		return error;//初始化失败
	l.length = 0;//置空表
	l.listsize = list_init_size;//线性表的最大存储容量
	return ok;//初始化成功,返回1
}

status crealist_sq(sqlist &l, int n)
{
   
	if (n<0 || n>l.listsize)
		return error;//输入的长度过大或者过小
	int i = 0;
	for (i = 0; i < n; i++)
	{
   
		scanf("%d", &l.elem[i]);
		l.length++;
	}
	return ok;
}

status listinsert_sq(sqlist &l, int i, elemtype e)//插入元素
{
   
	int j;
	if (i<1 || i>l.length + 1)
		return error;    // i 值不合法
	if (l.length == l.listsize)
	{
   
		l.elem = (elemtype*)malloc(listincrement*sizeof(elemtype));//增加内存空间
		if (!l.elem) return error; //空间分配失败
		l.listsize = l.listsize + listincrement;
	};
	for (j = l.length - 1; j >= i - 1; j--)
		l.elem[j + 1] = l.elem[j]; // 第l.length~i的元素依次后移
	l.elem[i - 1] = e;//在i-1的位置插入元素e
	++l.length;	 // 表长增1
	return ok;
}//listinsert_sq

status print_sq(sqlist l)//遍历输出线性表l中的所有元素
{
   
	if (!l.elem)
		return error;
	int i = 0, j;
	for (i = 0, j = 1; i <l.length; i++, j++)
		printf("第%d个元素=%d\n", j, l.elem[i]);//数组的输出
	return ok;//遍历成功
}

status listdelete_sq(sqlist &l, int i, elemtype &e)//删除线性表l中的第i个元素
{
   
	int k;
	if (i<1 || i>l.length)
		return error;//删除的位置不合法
	e = l.elem[i - 1];
	for (k = i - 1; k< l.length - 1; k++)
		l.elem[k] = l.elem[k + 1];//从i到l.length-1的全部元素都要往前移一位
	l.length--;//长度减1
	return ok;//删除成功
}

int locateelem_sq(sqlist l, elemtype e)//在线性表中查找第一个与e相等的元素的位置
{
   
	int i;
	for (i = 0; i < l.length; i++)
	{
   
		if (l.elem[i] == e)
			return (i + 1);//查找到了则返回位置第i+1;
	}
	return error;//没有查找到元素e,查找失败
}

status listempty_sq(sqlist l)//判断sqlist是否为空
{
   
	if (l.length >0)
		return error;//不是空表,返回error
	else
		return ok;//是空表,返回ok

}

status freelist_sq(sqlist &l)
{
   
	if (!l.elem)
		return error;//如果已经是空表,则返回erro
	else
		free(l.elem);
	return ok;//销毁成功
}

status clearlist_sq(sqlist &l)//将sqlist置为空表
{
   
	l.length = 0;
	return ok;
}

status priorelem_sq(sqlist l, elemtype cur_e, elemtype &pre_e)//求cur_e的前驱,用pre_ef返回
{
   
	if (l.elem[0] == cur_e)
		return error;//第一个数据元素无前驱
	int i = 0;
	for (i = 1; i < l.length; i++)
	{
   
		if (l.elem[i] == cur_e)
		{
   
			pre_e = l.elem[i - 1];//pre_e为cur_e的前驱
			return ok;
		}
	}
	return error;//线性表中没有cur_e元素
}

status nextelem_sq(sqlist l, elemtype cur_e, elemtype &next_e)
{
   
	if (l.elem[l.length - 1] == cur_e)
		return error;//sqlist中的最后一个元素无后继;
	int i = 0;
	for (i = 0; i < l.length - 1; i++)
	
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值