目的:领会顺序表的存储结构和掌握顺序表中各种基本运算算法的设计。
内容:编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型 ElemType为char),并在此基础上设计一个程序exp2-1.cpp完成以下功能。
- 初始化顺序表L。
- 依次插入元素a、b、c、d、e。
- 输出顺序表L。
- 输出顺序表L的长度。
- 判断顺序表L是否为空。
- 输出顺序表L的第3个元素。
- 输出元素a的位置。
- 在第4个元素的位置上插入元素f。
- 输出顺序表L。
- 删除顺序表L的第3个元素。
- 输出顺序表L。
- 释放顺序表L。
//计算机 小淇在敲代码 实现顺序表的各种基本运算的算法 #include<stdio.h> #include<malloc.h> //线性表的顺序存储结构 #define MaxSize 50 typedef char ElemType; char ch; typedef struct { ElemType data[MaxSize]; int length; }SqList; //(1)初始化顺序表 void InitList(SqList * &L) { L=(SqList *)malloc(sizeof(SqList)); L->length=0; } //(2)依次插入a,b,c,d,e元素 bool ListInsert(SqList * &L,int i,ElemType e) { int j; if(i<1 || i>L->length+1) return false; i--; for(j=L->length;j>i;j--) L->data[j]=L->data[j-1]; L->data[i]=e; L->length++; return true; } //(3)输出顺序表 void DisplayList(SqList * L) { for(int i=0;i<L->length;i++) printf("%c",L->data[i]); printf("\n"); } //(4)求线性表的长度 int ListLength(SqList * L) { return (L->length); } //(5)判断顺序表L是否为空 bool ListEmpty(SqList * L) { return (L->length==0); } //(6)输出顺序表L的三个元素 bool GetElem(SqList * L,int i,ElemType e) { if(i<1||i>L->length) return false; e=L->data[i-1]; ch=e; return true; } //(7)查找顺序表所在位置 int LocateElem(SqList * L,ElemType e) { int i=0; while(i<L->length&&L->data[i]!=e) i++; if(i>=L->length) return 0; else return i+1; } //(10)删除顺序表上的第三个元素 bool ListDelete(SqList * &L,int i,ElemType e) { int j; if(i<1 ||i>L->length) return false; i--; e=L->data[i]; for(j=i;j<L->length-1;j++) L->data[j]=L->data[j+1]; L->length--; return true; } //(12)释放线性表 void DestroyList(SqList * &L) { free(L); } //主函数 int main() { SqList *L; printf("计算机 小淇在敲代码\n"); printf("顺序表的基本运算如下:\n"); printf("(1)初始化顺序表L.\n"); InitList(L); printf("(2)依次插入a,b,c,d,e元素.\n"); ListInsert(L,1,'a'); ListInsert(L,2,'b'); ListInsert(L,3,'c'); ListInsert(L,4,'d'); ListInsert(L,5,'e'); printf("(3)输出顺序表L:"); DisplayList(L); printf("(4)输出顺序表L的长度:%d\n",ListLength(L)); printf("(5)判断顺序表L是否为空:%s\n",(ListEmpty(L)?"空":"非空")); GetElem(L,3,'e'); printf("(6)输出顺序表L的第3个元素:%c\n",ch); printf("(7)输出元素a的位置:%d\n",LocateElem(L,'a')); printf("(8)在第4个元素位置上插入f元素.\n"); ListInsert(L,4,'f'); printf("(9)输出顺序表L:"); DisplayList(L); printf("(10)删除顺序表L的第3个元素.\n"); ListDelete(L,3,'e'); printf("(11)输出顺序表L:"); DisplayList(L); printf("(12)释放顺序表L\n"); DestroyList(L); return 0; }