数据结构--顺序表c语言实现

SqList.h如下:

<pre name="code" class="cpp">#ifndef __SQLIST_H
#define __SQLIST_H

typedef struct Sqlist
{
	int *data;
	int usedsize;
	int size;
}Sqlist;

void InitList(Sqlist *list);//初始化顺序表

void Destory(Sqlist *list);//摧毁顺序表

bool ListEmpty(Sqlist *list);//判断顺序表是否为空

int ListLength(Sqlist *list);//取得顺序表长度

bool GetElem(Sqlist *list,int i,int *e);//取得顺序表中第i个元素的值放到e

bool PriElem(Sqlist *list,int cur,int *e);//返回cur的前驱

bool NextElem(Sqlist *list,int cur,int *e);//返回cur的后继

bool Insert_Head(Sqlist *list,int var);//头插元素

bool Insert_Tail(Sqlist *list,int var);//尾插元素

bool Insert_Sq(Sqlist *list,int pos,int var);//在顺序表第pos个元素前插入var

int Search(Sqlist *list,int var,int pos);//判断顺序表中pos后是否含有值为var的元素

bool Delete(Sqlist *list,int pos);//删除第pos个元素

void Show(Sqlist *list);//打印

void Traverselist(Sqlist *list);//就地逆置

#endif


 

SqList.c如下:
<pre name="code" class="cpp">#include"SqList.h"
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

#define MAXSIZE 20
#define INCSIZE 10

void InitList(Sqlist *list)//初始化顺序表
{
	list->data=(int *)malloc(sizeof(int)*MAXSIZE);
	assert(list->data);
	list->size=MAXSIZE;
	list->usedsize=0;
}

void Destory(Sqlist *list)//摧毁顺序表
{
	free(list->data);
	list->size=0;
	list->usedsize=0;
}

bool ListEmpty(Sqlist *list)//判断顺序表是否为空
{
	if(list->usedsize==0)
		return true;
	return false;
}

int ListLength(Sqlist *list)//取得顺序表长度
{
	return list->usedsize;
}

bool GetElem(Sqlist *list,int i,int *e)//取得顺序表中第i个元素的值放到e
{
	if(i<0 || i>list->usedsize)
		return false;
	*e=list->data[i];
	return true;
}

bool PriElem(Sqlist *list,int cur,int *e)//返回cur的前驱
{
	int pos=Search(list,cur,0);
	if(pos<=0)
		return false;
	*e=list->data[pos-1];
	return true;

}

bool NextElem(Sqlist *list,int cur,int *e)//返回cur的后继
{
	int pos=Search(list,cur,0);
	if(pos<0 || pos==list->usedsize-1)
		return false;
	*e=list->data[pos+1];
	return true;
}

bool Insert_Head(Sqlist *list,int var)//头插元素
{
	if(list->usedsize==list->size)
	{
		list->data=(int *)realloc(list->data,sizeof(int)*(list->size+INCSIZE));
		assert(list->data);
		list->size+=INCSIZE;
	}
	for(int i=list->usedsize;i>0;i--)
	{
		list->data[i]=list->data[i-1];
	}
	list->data[0]=var;
	list->usedsize++;
	return true;
}

bool Insert_Tail(Sqlist *list,int var)//尾插元素
{
	if(list->usedsize==list->size)
	{
		list->data=(int *)realloc(list->data,sizeof(int)*(list->size+INCSIZE));
		assert(list->data);
		list->size+=INCSIZE;
	}
	list->data[list->usedsize]=var;
	list->usedsize++;
	return true;
}

bool Insert_Sq(Sqlist *list,int pos,int var)//在顺序表第pos个元素前插入var
{
	if(pos<1 ||pos>list->usedsize+1)
		return false;
	for(int i=list->usedsize-1;i>=pos-1;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[pos-1]=var;
	list->usedsize++;
	return true;
}

int Search(Sqlist *list,int var,int pos)//判断顺序表中pos后是否含有值为var的元素
{
	if(pos<0 ||pos>list->usedsize+1)
		return -1;
	for(int i=pos;i<list->usedsize;i++)
	{
		if(list->data[i]==var)
			return i;
	}
	return -1;
}

bool Delete(Sqlist *list,int pos)//删除第pos个元素
{
	if(pos<1 ||pos>list->usedsize)
		return false;
	for(int i=pos;i<list->usedsize;i++)
	{
		list->data[i-1]=list->data[i];
	}
	list->usedsize--;
	return true;
}

void Show(Sqlist *list)//打印
{
	for(int i=0;i<list->usedsize;i++)
	{
		printf("%d ",list->data[i]);
	}
	printf("\n");
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值