C语言下的带头节点的顺序表

1、创建顺序表的结构体

1、创建一个大小为10的顺序表

#define LISTSIZE 10
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int(*Compare)(ElemType,ElemType);

typedef struct SqList
{
	ElemType data[LISTSIZE];
	int length;
}SqList,*SqListPtr;
2、初始化函数
void InitList_Sq(SqListPtr sqlist) //初始化函数
{
	if(sqlist == NULL) exit(0);
	sqlist->length = 0;
}
3、判断顺序表是否为满函数
static int IsFull_Sq(SqListPtr sqlist)  
{
	if(sqlist->length==LISTSIZE)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
4、三种不同插入函数(按位置插入、头插入、尾插入)
int InsertList_Sq_Pos(SqListPtr sqlist,ElemType val,int pos) //按位插入
{
	if(sqlist == 0) exit(0);
	if(IsFull_Sq(sqlist))
	{
		return FALSE;
	}
	if(pos<0 || pos>sqlist->length)
	{
			return FALSE;
	}

	int i=sqlist->length;
	while(i>pos)
	{
		sqlist->data[i] = sqlist->data[i-1];
		i--;
	}
	sqlist->data[i]=val;
	sqlist->length++;
	return TRUE;

}
int InsertList_Sq_Head(SqListPtr sqlist,ElemType val) //头插
{
	if(sqlist == 0) exit(0);
	if(IsFull_Sq(sqlist))
	{
		return FALSE;
	}
	int i=sqlist->length;
	while(i !=0 )
	{
		sqlist->data[i]=sqlist->data[i-1];
		i--;
	}
	sqlist->data[i]=val;
	sqlist->length++;
	return TRUE;
}
int InsertList_Sq_Tail(SqListPtr sqlist,ElemType val)  //尾插
{
	if(sqlist == NULL) exit(0);
	if(IsFull_Sq(sqlist))
	{
		return FALSE;
	}
	sqlist->data[sqlist->length]=val;
	sqlist->length++;
	return TRUE;
}
5、三种删除方式函数(按位置删除、头删、尾删)
void DeleteList_Sq_Pos(SqListPtr sqlist,int pos)  //按位置删除
{
	if(sqlist == NULL) exit(0);
	if(pos<0 || pos>=sqlist->length)
	{
			return ;
	}
	int i=pos;
	while(i<sqlist->length-1)
	{
		sqlist->data[i]=sqlist->data[i+1];
		i++;
	}
	sqlist->length--;
}
void DeleteList_Sq_Head(SqListPtr sqlist)  //头删
{
	if(sqlist == NULL) exit(0);
	int i=0;
	while(i<sqlist->length-1)
	{
		sqlist->data[i]=sqlist->data[i+1];
		i++;
	}
	sqlist->length--;
}
void DeleteList_Sq_Tail(SqListPtr sqlist) //尾删
{
	sqlist->data[sqlist->length--]=0;
	sqlist->length--;
}
6、输出函数
void ShowList_Sq(SqListPtr sqlist)  //输出
{
	if(sqlist == NULL) exit(0);
	int i=0;
	for(i=0;i<sqlist->length;i++)
	{
		printf("%d ",sqlist->data[i]);
	}
	printf("\n");
}
7、清空和销毁函数
void ClearList_Sq(SqListPtr sqlist)  //清空
{
	if(sqlist == NULL) exit(0);
	for(int i=0;i<sqlist->length;i++)
	{
		sqlist->data[i]=0;
	}
	sqlist->length=0;
}
void DestroyList_Sq(SqListPtr sqlist) // 销毁
{
	if(sqlist == NULL) 
	exit(0);
	for(int i=1;i<sqlist->length;i++)
	{
		sqlist->data[i]=0;
	}
	sqlist->length=0;
}
8、测试用例代码
int main()
{
	SqList sq;
	InitList_Sq(&sq);
	for(int i=0;i<10;i++)
	{
		InsertList_Sq_Tail(&sq,i+1);
	}
	ShowList_Sq(&sq);
	DeleteList_Sq_Pos(&sq,4);
	ShowList_Sq(&sq);
	ClearList_Sq(&sq);
	ShowList_Sq(&sq);
	DestroyList_Sq(&sq);
	ShowList_Sq(&sq);
}

查看上一篇文章2048小游戏
查看下一篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值