线性表的基本运算
1.初始化线性表
void InitList(LinkNode*&L) {
L = (LinkNode*)malloc(sizeof(LinkNode));//创建头结点
L->next = NULL;
}
2.销毁线性表
void DestroyList(LinkNode*& L) {
LinkNode* pre=L, *p=L->next;
while (p != NULL) {
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
3.判断线性表是否为空
bool ListEmpty(LinkNode* L) {
return(L->next == NULL);
}
4.求线性表的长度
int ListLength(LinkNode* L) {
int length = 0;
LinkNode*p=L
while (p->next!= NULL) {
length++;
p = p->next;
}
return length;
}
5.输出线性表
void DispList(LinkNode* L) {
LinkNode* p = L->next;//指向首结点
while (p!= NULL) {
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
6.按序号查找线性表中的元素
bool GetElem(LinkNode* L, int i, ElemType& e) {
int j = 0;
if (i <= 0) {
return false;
}
LinkNode* p = L;//指向头结点
while (j < i && p != NULL) {
j++;
p = p->next;
}
if (p==NULL) {
return false;
}
else {
e=p->data;
return true;
}
}
7.按值查找
bool LocateElem(LinkNode* L, ElemType e) {
int i = 0;
LinkNode* p = L->next;
while (p!=NULL&&p->data != e) {
p = p->next;
i++;
}
if (p == NULL) {
return 0;
}
return i;
}
8.插入数据元素
bool ListInsert(LinkNode*& L, int i, ElemType e) {
int j = 0;
LinkNode* p = L,*s;
if (i <= 0) {
return false;
}
while (j < i - 1 && p != NULL) {
j++;
p = p->next;
}
if (p == NULL) {
return false;
}
else {
s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
}
9.删除数据元素
bool ListDelete(LinkNode*& L,int i, ElemType &e) {
int j = 0;
if (i <= 0) {
return false;
}
LinkNode* p = L->next,*q;
while (j < i-1 && p != NULL) {
j++;
p = p->next;
}
if (p == NULL) {
return false;
}
else {
q = p->next;
if (q == NULL) {
return false;
}
e = q->data;
p->next = q->next;
free(q);
return true;
}
}