顺序表

#define ERROR -1
#define MAXSIZE 100
typedef int Position;
typedef struct LNode*PtrToLNode;
struct LNode {
	DataType element[MAXSIZE];
	Position Last;
};
typedef PtrToLNode List;

//1.创建并且返回一个空线性表
List MakeEmpty() {
	List list;
	list=(List)malloc(sizeof(struct LNode));
	list->Last=-1;
	return list;
}

//2.在list的位置p前插入值为x的元素,并返回成功否标志
bool insertPre(List list, Position p, DataType x) {
	Position q=0;
	if(list->Last==MAXSIZE-1) { //表空间已满,不能插入
		printf("表满");
		return false;
	}
	if(p<1||p>list->Last+2) { //检查插入位序的合法性:是否在1~n+1
		printf("位序不合法");
		return false;
	}
	for (q=list->Last; q>=p-1; q--)
		list->element[q+1]=list->element[q];
	list->element[p-1]=x;
	list->Last++;
	return true;
}

//3.在list的位置p后插入值为x的元素,并返回成功否标志
bool insertPost(List list, Position p, DataType x) {
	Position q=0;
	if(list->Last==MAXSIZE-1) { //表空间已满,不能插入
		printf("表满");
		return false;
	}
	if(p<2||p>list->Last+2) { //检查插入位序的合法性:是否在2~n+1
		printf("位序不合法");
		return false;
	}
	for (q=list->Last; q>=p; q--)
		list->element[q+1]=list->element[q];
	list->element[p]=x;
	list->Last++;
	return true;
}

//4.删除一个值为x的元素,并返回成功否标志
bool deleteV(List list, DataType x) {
	Position p,q;
	p=Find(list,x);//代码见6. 查找
	if(p<1||i>list->Last+1) {
		printf("不存在值为%s的元素",x);
		return false;
	}
	for(q=p; q<=list->Last; q++)
		list->element[q-1]=list->element[q];
	list->Last--;
	return true;
}

//5.删除位置p的元素,并返回成功否标志
bool deleteP(List list, Position p) {
	Position q;
	if(p<1||i>list->Last+1) {
		printf("位序%d不存在元素",p);
		return false;
	}
	for(q=p; q<=list->Last; q++)
		list->element[q-1]=list->element[q];
	list->Last--;
	return true;
}

//6.返查找值为x的元素的位置
Position Find(List list, DataType  x) {
	Position p=0;
	while(p<=list->Last&&list->element[p]!=x)
		p++;
	if(p>list->Last)
		return ERROR;
	else
		return p;
}

//7.判断list是否是空线性表
int isNull(List list) {
	return (list->n==0);
}

typedef struct Node {
	DataType info;//值域
	struct Node *link;//指针域
}*PNode, *LinkList;
typedef List *PtrToLNode ;
LinkList llist;

int Length(LinkList llist) {
	Position p;
	int cnt=0;
	p=llist;
	while(p) {
		p=p->Next;
		cnt++;
	}
	return cnt
}

DataType FindKth(LinkList llist,int K) {
	Position p;
	int cnt=1;
	p=L;
	while(p&&cnt<K) {
		p=p->Next;
		cnt++;
	}
	if((cnt==K)&&p)
		return p->Data;
	else
		return ERROR;
}

Position Find(LinkList List,DataType X) {
	Position p=L;
	while(p&&p->Data!=X)
		p=p->Next;
	if(p)
		return p;
	else
		return ERROR;
}
posted @   油菜园12号  阅读(7)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示