/** * 创建数组的线性表 * @return */ List makeEmpty(){ List l; l = (List)malloc(sizeof(struct LNode)); l->Last = -1; return l; }
/** * 查找 * @param L * @param X * @return */ Position find(List l, int x){ // 从0开始查起 Position i = 0; // 没有到查到相应的值或者最后一个值都不停止查找 while(i <= l->Last && l->Data[i] != x){ i++; } // 如果超出了线性表的范围,则返回ERROR if (i > l->Last){ return ELEMENT_NOT_FOUND; } else { return i; } }
/** * 在i之前的元素插入 * @param l * @param x * @param i * @return */ boolinsert(List l, int x, int i){ Position j; if (l->Last == DEFAULT_SIZE -1) { printf("表满"); returnfalse; }
// DEFAULT_SIZE = n,则最后一个元素为l->Last + 1 if (i < 1 || i > l->Last + 2) { printf("位序不合法"); returnfalse; }
/** * 获取index位置的元素 * @param index * @return */ public E get(int index){ rangeCheck(index); return elements[index]; }
/** * 设置index位置的元素 * @param index * @param element * @return 原来的元素ֵ */ public E set(int index, E element){ rangeCheck(index); E old = elements[index]; elements[index] = element; return old; }
/** * 在index位置插入一个元素 * @param index * @param element */ publicvoidadd(int index, E element){ rangeCheckForAdd(index); ensureCapacity(size + 1); for (int i = size; i > index; i--) { elements[i] = elements[i - 1]; } elements[index] = element; size++; }
/** * 删除index位置的元素 * @param index * @return */ public E remove(int index){ rangeCheck(index); E old = elements[index]; for (int i = index + 1; i < size; i++) { elements[i - 1] = elements[i]; } elements[--size] = null; return old; }
/** * 查看元素的索引 * @param element * @return */ publicintindexOf(E element){ if (element == null) { for (int i = 0; i < size; i++) { if (elements[i] == null) return i; } } else { for (int i = 0; i < size; i++) { if (element.equals(elements[i])) return i; } } return ELEMENT_NOT_FOUND; }
/** * 保证要有capacity的容量 * @param capacity */ privatevoidensureCapacity(int capacity){ int oldCapacity = elements.length; if (oldCapacity >= capacity) return;
// 新容量为旧容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1); E[] newElements = (E[]) new Object[newCapacity]; for (int i = 0; i < size; i++) { newElements[i] = elements[i]; } elements = newElements;