#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;
}