DS-2-顺序表的插入,删除与查找的实现
插入与删除:
#include <stdio.h> #define MaxSize 10 typedef struct { int data[MaxSize]; int length; }SqList; bool ListInsert(SqList &L, int i, int e) { if (i<1 || i>L.length + 1) //判断i的范围是否有效 return false; if (L.length >= MaxSize) //存储空间已满 return false; for (int j = L.length; j >= i; j--) //元素依次后移 L.data[j] = L.data[j - 1]; L.data[i - 1] = e; L.length++; return true; } bool ListDelete(SqList &L, int i, int &e) { if (i<1 || i>L.length) return false; e = L.data[i - 1]; for (int j = i; j < L.length; j++) //后边元素依次前移 L.data[j - 1] = L.data[j]; L.length--; return true; } int main() { SqList L; InitList(L); //...插入几个元素,代码省略 ListInsert(L, 3, 3); //在第三个位置插入值为3的元素 int e = -1; //用e把删除的元素带回来 if (ListDelete(L, 3, e)) printf("已删除第3个元素,删除元素值为=%d\n", e); else printf("位序i不合法,删除失败\n"); return 0; }
静态定义与动态定义的按位查找都一样:
ElemType GetElem(SqList L, int i) { return L.data[i - 1];
按值查找:
//在顺序表L中查找第一个元素值等于e的元素,并返回其位序 int LocateElem(SeqList L,int e){ for(int i=0;i<L.length;i++) if(L.data[i]==e) //返回位序 return i+1; //查找失败 return 0; }