您的位置:首页 > 理论基础 > 数据结构算法

线性表的基本操作实现(基于链表)

2015-12-09 22:01 337 查看
用C++链表方式实现了线性表的一些基本操作,包括插入元素,删除元素,反转线性表等.

#include <stdio.h>
#include <stdlib.h>

#define ERROR NULL
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

Position Find(List L, ElementType X);//返回线性表中首次出现X的位置。若找不到则返回ERROR;
Position FindPrevious(List L, Position P);//给定位置P,返回指向位置P的前一位置.如果找不到,则返回ERROR

List Insert(List L, ElementType X, Position P);
//将X插入在位置P指向的结点之前,返回链表的表头。如果参数P指向非法位置,返回ERROR;

List Delete(List L, Position P);
//将位置P的元素删除并返回链表的表头。若参数P指向非法位置,并返回ERROR。

List Reverse(List L);//反转线性表
void Print(List L);//打印线性表的内容
void Destory(List L);//销毁线性表

Position Find(List L, ElementType X) {
Position find=L;
while (1) {
if (find) {
if (find->Data == X) {
break;
}
else {
find = find->Next;
}
}
else {break;}
}
if (find) {
return find;
}
else { return ERROR; }
}
Position FindPrevious(List L, Position P) {
Position findprev = L;
while (1) {
if (findprev) {
if (findprev->Next != P) {
findprev = findprev->Next;
}
else { break; }
}
else { break; }
}
if (findprev) { return findprev; }
else { return ERROR; }
}
List Insert(List L, ElementType X, Position P) {
if (L == P) {
Position Temp = (Position)malloc(sizeof(struct LNode));
Temp->Data = X;
Temp->Next = L;
return Temp;
}
else {
Position findprev = FindPrevious(L, P);
if (findprev) {
Position Temp = (Position)malloc(sizeof(struct LNode));
Temp->Data = X;
Temp->Next = P;
findprev->Next = Temp;
return L;
}
else {
return ERROR;
}
}

}
List Delete(List L, Position P) {
if (L == P) {
L = L->Next;
free(P);
return L;
}
else {
Position findprev = FindPrevious(L, P);
if (findprev) {
findprev->Next = P->Next;
free(P);
return L;
}
else {
return ERROR;
}
}
}
List Reverse(List L) {
if (L->Next) {
List front = L;
List  middle = L->Next;
front->Next = NULL;
if (middle->Next) {
List end;
end = middle->Next;
while (end) {
middle->Next = front;
front = middle;
middle = end;
end = end->Next;
}
}
middle->Next = front;
return middle;
}
else {
return L;
}
}
void Print(List L) {
Position p;
for (p = L; p; p = p->Next) {
printf("&d ", p->Data);
}
}
void Destory(List L) {
Position p;
for (p = L; L->Next; p = L) {
L = L->Next;
free(p);
}
free(L);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构