本章需要掌握:
- 1、顺序表(静态分配)怎么定义?
- 2、打印PrintList、插入ListInsert、删除ListDelete、查找LocateElem
0、与408关联(大题)
会考到顺序表和链表,对表中内容进行操作
1、顺序表原理
什么是线性表?n个相同类型的元素组成的有序集合。
ai-1是ai的前驱,ai+1是ai的后继
2、顺序表初始化、插入、打印、删除、查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <stdio.h> #define MaxSize 50
typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int length; }SqList;
bool ListInsert(SqList &L,int i,ElemType element) { if(i<1 || i>L.length+1) { 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]=element; L.length++; return true; }
void PrintList(SqList L) { int i; for(i=0;i<L.length;i++) { printf("%3d",L.data[i]); } printf("\n"); }
bool ListDelete(SqList &L,int i,ElemType &e) { if(i<1 || i>L.length) { return false; } e=L.data[i-1]; int j; for(j=i;j<L.length;j++) { L.data[j-1]=L.data[j]; } L.length--; return true; }
int LocateElem(SqList L,ElemType element) { int i; for(i=0;i<L.length;i++) { if(element==L.data[i]) { return i+1; } } return 0; }
int main() { SqList L; bool ret; L.data[0]=1; L.data[1]=2; L.data[2]=3; L.length=3; ret=ListInsert(L,2,60); if(ret) { printf("insert sqlist success\n"); PrintList(L); }else{ printf("insert sqlist failed\n"); } printf("----------------------\n"); ElemType del; ret=ListDelete(L,1,del); if(ret) { printf("delete sqlist success\n"); printf("del element=%d\n",del); PrintList(L); }else{ printf("delete sqlist failed\n"); } int pos; pos=LocateElem(L,60); if(pos) { printf("find this element\n"); printf("element pos=%d\n",pos); }else{ printf("don't find this element\n"); } return 0; }
|
🌺3、OJ作业
网站:http://oj.lgwenda.com/
1、结构体(struct)
描述:初始化顺序表(顺序表中元素为整型),里边的元素是1,2,3,然后通过scanf读取一个元素(假如插入的是6),插入到第2个位置,打印输出顺序表,每个元素占3个空格,格式为1 6 2 3,然后scanf读取一个整型数,是删除的位置(假如输入为1),然后输出顺序表 6 2 3,假如输入的位置不合法,输出false字符串。提醒,Language一定要选为C++。
输入:第一次输入插入的元素值,第二次输入删除的位置
输出:假如插入的元素为6,那么输出为1 6 2 3
假如删除的位置为1,那么输出为6 2 3
🌺🌺🌺题解ヾ(^▽^)ゞ🌼🌼🌼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| #include <stdio.h> #define MaxSize 50
typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int length; }SqList;
void ListInsert(SqList &L,int pos,ElemType InsertVal) { if(pos<1 || pos>L.length+1) { return; } if (L.length >= MaxSize) { return; } int j; for(j=L.length;j>=pos;j--) { L.data[j]=L.data[j-1]; } L.data[pos-1]=InsertVal; L.length++; }
void PrintList(SqList L) { int i; for(i=0;i<L.length;i++) { printf("%3d",L.data[i]); } printf("\n"); }
bool ListDelete(SqList &L,int i) { if(i<1 || i>L.length) { return false; } int j; for(j=i;j<L.length;j++) { L.data[j-1]=L.data[j]; } L.length--; return true; }
int main() { SqList L; L.data[0]=1; L.data[1]=2; L.data[2]=3; L.length=3; ElemType InsertVal; scanf("%d",&InsertVal); ListInsert(L,2,InsertVal); PrintList(L); int DeletePos; bool ret; scanf("%d",&DeletePos); ret=ListDelete(L,DeletePos); if(ret) { PrintList(L); }else{ printf("false\n"); } return 0; }
|