List MakeEmpty(); Position Find( List L, ElementType X ); boolInsert( List L, ElementType X, Position P ); boolDelete( List L, Position P );
intmain() { List L; ElementType X; Position P; int N;
L = MakeEmpty(); scanf("%d", &N); while ( N-- ) { scanf("%d", &X); if ( Insert(L, X, 0)==false ) printf(" Insertion Error: %d is not in.\n", X); } scanf("%d", &N); while ( N-- ) { scanf("%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("%d", &N); while ( N-- ) { scanf("%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"); } return0; }
/* 你的代码将被嵌在这里 */
输入样例:
1 2 3 4 5 6
6 1 2 3 4 5 6 3 6 5 1 2 -1 6
输出样例:
1 2 3 4 5 6 7 8
FULL Insertion Error: 6 is not in. Finding Error: 6 is not in. 5 is at position 0. 1 is at position 4. POSITION -1 EMPTY Deletion Error. FULL Insertion Error: 0 is not in. POSITION 6 EMPTY Deletion Error. FULL Insertion Error: 0 is not in.
// 创建并返回一个空的线性表 List MakeEmpty() { List 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 boolInsert( List L, ElementType X, Position P ) { if (L->Last == MAXSIZE-1) { printf("FULL"); returnfalse; } elseif (P < 0 || P > L->Last +1) { printf("ILLEGAL POSITION"); returnfalse; } // 其他情况就是插入正确位置 for (int i = L->Last; i >= P; i--) { // 将P位置和P后面的往后挪 L->Data[i+1] = L->Data[i]; } // 把X插进去 L->Data[P] = X; L->Last++; returntrue; }
// 将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。 boolDelete( List L, Position P ) { if (P < 0 || P > L->Last) { printf("POSITION %d EMPTY", P); returnfalse; } for (int i = P; i < L->Last; i++) { L->Data[i] = L->Data[i+1]; } L->Last--; returntrue; }
位置 P 定义:P 是数组下标(从 0 开始),插入时允许 P=Last+1(表尾插入),删除时仅允许 P≤Last(需指向有效元素)。
维度
C 语言实现
C++ 实现(两种方式)
分配内存
使用 malloc,需手动计算结构体大小 + 强制类型转换:List L = (List)malloc(sizeof(struct LNode));
方式 1:兼容 C 的 malloc(同左);方式 2:用 C++ 专属 new,自动匹配类型,无需计算大小:List L = new LNode;
释放内存
使用 free:free(L);
方式 1:兼容 C 的 free(同左);方式 2:用 C++ 专属 delete:delete L;