C++ 线性表的基本操作

#include #include #define MAXSIZE 5 #define ERROR -1typedef int ElementType; typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */ }; List MakeEmpty(); Position Find(List L, ElementType X); bool Insert(List L, ElementType X, Position P); bool Delete(List L, Position P); int main() { List L; ElementType X; Position P; int N; L = MakeEmpty(); scanf_s("%d", &N); while (N--) { scanf_s("%d", &X); if (Insert(L, X, 0) == false) printf(" Insertion Error: %d is not in.\n", X); } scanf_s("%d", &N); while (N--) { scanf_s("%d", &X); P = Find(L, X); if (P == ERROR) printf("Finding Error: %d is not in.\n", X); else printf("%d is at position %d.\n", X, P); } scanf_s("%d", &N); while (N--) { scanf_s("%d", &P); if (Delete(L, P) == false) printf(" Deletion Error.\n"); if (Insert(L, 0, P) == false) printf(" Insertion Error: 0 is not in.\n"); } return 0; }// 创建并返回一个空的线性表; List MakeEmpty() { List L; L = (List)malloc(sizeof(struct LNode)); L->Last = -1; return L; }// 按顺序查找元素X的位置,找不到返回ERROR Position Find(List L, ElementType X) { for (int i = 0; i <= L->Last; i++) { if (L->Data[i] == X) return i; } return ERROR; }//将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false; //如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false bool Insert(List L, ElementType X, Position P) { if (L->Last == MAXSIZE-1) { printf("FULL"); return false; } if (P<0 || P>L->Last + 1) { printf("ILLEGAL POSITION"); return false; } for (int k = L->Last + 1; k > P; k--) { L->Data[k] = L->Data[k - 1]; } L->Data[P] = X; L->Last++; return true; }//将位置P的元素删除并返回true。若参数P指向非法位置, //则打印“POSITION P EMPTY”(其中P是参数值)并返回false。 bool Delete(List L, Position P) { if (P<0 || P>L->Last) { printf("POSITION %d EMPTY",P); return false; } for (int i = P; i < L->Last - 1; i++) L->Data[i] = L->Data[i + 1]; L->Last--; return true; }

【C++ 线性表的基本操作】

    推荐阅读