本节重点:
1.充分了解顺序表的构建,增删改查
2.体验顺序表中元素如何进行操作
3.能灵活运用指针和引用进行编程
4.领会顺序表储存结构和掌握顺序表中各种基本运算算法设计
声明:
以下内容仅供学习,如有侵权,联系作者删除。
参考文献:数据结构上机实验指导p10
代码段展示:
第一部分
包含头文件定义,初始化线性表,销毁线性表以及判断线性表是否为空操作
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50 //注意不要加分号
//目的:领会顺序表中储存结构和掌握顺序表中各种基本运算算法设计
//内容:实现线性表的各种基本运算,整体建表算法
typedef char ElemType;
typedef struct {
ElemType data[MaxSize];//存放顺序表的元素
int length;//存放顺序表的长度
}SqList;//声明顺序表的类型
//整体建立顺序表
void CreatList(SqList*& L, ElemType a[], int n) {
L = (SqList *)malloc(sizeof(SqList));
if (L) {
for (int i = 0; i < n; i++) {
L->data[i] = a[i];
}
L->length = n;
}
}
//初始化线性表
void InitList(SqList *&L) {//注意符号间隔问题
L = (SqList *)malloc(sizeof(SqList));//分配存放顺序表的空间
if (L) {
L->length = 0;//置空线性表的长度为零
}
}
//销毁线性表
void DestroyList(SqList *L) {
free(L);//释放L所指的顺序表空间
}
//判断线性表是否为空表
bool ListEmpty(SqList* L) {
return (L->length == 0);
}
第二部分
简单的输出,以及求线性表中储存的值
//输出线性表
void DispList(SqList* L) {
for (int i = 0; i < L->length; i++)
printf("%c",L->data[i]);
printf("\n");
}
//求线性表中第i个元素的值
bool GetElem(SqList* L, int i, ElemType e) {
if (i<1 || i>L->length)
return false;
else {
e = L->data[i - 1];
return true;
}
}
第三部分
增,在线性表中插入元素
//插入第i个元素
bool ListInsert(SqList*& L, int i, ElemType e) {
int j;
if (i<1 || i>L->length + 1)
return false;
i--;//将顺序表位转化为data下标
for (j = L->length; j > i; j--) {//此时data【j】下标为原下标加1,相当于向后扩充了一位
L->data[j] = L->data[j - 1];
}//将data【i】及其后面元素后移一个位置
L->data[i] = e;
L->length++;
return true;
}
第四部分
删,删除线性表中元素
//删除第i个元素
bool ListDelete(SqList*& L, int i, ElemType e) {
int j;
if (i<1 || i>L->length)
return false;
i--;//将顺序表转化为data下标
e = L->data[i];
for (j = 1; j < L->length - 1; j++) {
L->data[j] = L->data[j + 1];
}//将data【i】之后的元素前移一个位置
L ->length--;//顺序表长度减一
return true;
}
第五部分
查,查找线性表中指定值域中的元素符号
//查找第一个值域为e的元素符号
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;
}
main函数:输出
int main() {
SqList* L;
ElemType e;
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:\n");
printf("4.顺序表长度:%d\n",ListLength(L));
printf("5.顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
GetElem(L, 3, e);
printf("6.顺序表L中的第三个元素是:%c\n",e);
printf("7.元素a的位置:%d\n",LocateElem(L,'a'));
printf("8.在第四个元素位置插入f元素\n");
ListInsert(L, 4, 'f');
printf("9.输出顺序表L:");
DispList(L);
printf("10.删除L的第三个元素\n");
ListDelete(L, 3, e);
printf("11,输出顺序表L:");
DispList(L);
printf("12.释放顺序表L\n" );
DestroyList(L);
return 1;
}