顺序表

#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 @ 2021-10-08 21:11  油菜园12号  阅读(5)  评论(0编辑  收藏  举报