数据结构(严蔚敏版)---------------------------------------顺序表的基本操作及其应用【详解】

xiaoxiao2025-08-09  24

将来的你一定会感谢现在努力学习的你!

经过一个下午的折腾和鼓捣,终于成功的将数据结构(严蔚敏版)的顺序表给调试好了,我测了大量的数据都通过!如有不合适的地方还请路过的大佬能指示一下,我在此先深深表示一下感谢!

不废话了,我这个代码写的非常详细!大家看代码学习,不懂的可以留言!

最后希望大家都能写好基本的数据结构!

代码如下:

#include<iostream> #include<algorithm> #include<string.h> #define MAXSIZE 100 //顺序表可能达到的最大长度 using namespace std; typedef int Status; typedef int ElemType; typedef struct{ ElemType *elem; //存储空间的基地址,类似数组的首地址 int length; //当前长度 }SqList; //顺序表的结构类型为SqList //顺序表的初始化 Status InitList(SqList &L) { //构造一个空的顺序表L L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间 if(!L.elem) return 0; //存储分配失败退出 L.length = 0; //空表长度为0 return 1; } //顺序表的创建 Status CreateList(SqList &L) { printf("请您输入想要创建的顺序表的元素的个数:\n"); scanf("%d",&L.length); printf("请输入你想要创建的顺序表:\n"); for(int i=0;i<L.length;i++) scanf("%d",&L.elem[i]); } //顺序表的取值 Status GetElem(SqList L,int i,ElemType &e) { if(i<1 || i>L.length) //判断i值是否合理,如果不合理,返回0 return 0; e = L.elem[i-1]; //elem[i-1]单元存储第i个数据元素 return 1; } //顺序表的查找 Status LocateElem(SqList L,ElemType e) { //在顺序表L中查找值为e的数据元素,返回其序号 for(int i=0;i<L.length;i++) { if(L.elem[i] == e) return i+1; //查找成功,返回序号i+1 } return 0; } //顺序表的插入 Status ListInsert(SqList &L,int i,ElemType e) { //在顺序表L中第i个位置插入新的元素e,i值的合法范围是1<=i<=L.length+1 if((i<1) || (i>L.length+1)) return 0; //i值不合法 if(L.length == MAXSIZE) return 0; //当前的存储空间已经满了 for(int j=L.length-1;j>=i-1;j--) L.elem[j+1] = L.elem[j]; //插入位置及其之后的元素后移 L.elem[i-1] = e; //将新的元素e放入第i个位置 L.length++; //表长加1 return 1; } //顺序表的删除 Status ListDelete(SqList &L,int i) { //在顺序表L中删除第i个元素,i值的合法范围是1<=i<=L.length if((i<1) || (i>L.length)) return 0; //i值不合法 for(int j=i;j<=L.length-1;j++) L.elem[j-1] = L.elem[j]; //被删除元素之后的元素前移 L.length--; //表长减1 return 1; } int main() { int m,n; SqList L; InitList(L); CreateList(L); printf("请输入你要取值的位置和一个数:\n"); scanf("%d%d",&m,&n); GetElem(L,m,n); if(GetElem(L,m,n)) { printf("该位置的值已经被取出,取出的值是:\n"); printf("%d\n",n); } else { printf("取值位置输入有错误,拜拜!\n"); } printf("请输入你要查找的值:\n"); scanf("%d",&m); LocateElem(L,m); if(LocateElem(L,m)) { printf("你想要查找的值在线性表的位置如下:\n"); printf("%d\n",LocateElem(L,m)); } else { printf("你输入的值在线性表中没有!\n"); } printf("请输入你要插入的位置和元素的值:\n"); scanf("%d%d",&m,&n); ListInsert(L,m,n); if(ListInsert(L,m,n)) printf("插入成功!\n"); else printf("插入失败!\n"); //下面注释掉的是为了判断执行上述插入之后取值是否仍能正常运行 /*scanf("%d%d",&m,&n); GetElem(L,m,n); printf("%d\n",n);*/ printf("请输入你想要在顺序表中删除的第i个位置:\n"); scanf("%d",&n); ListDelete(L,n); if(ListDelete(L,n)) { printf("成功删除!\n"); } else printf("没有成功删除!\n"); //下面的是为了判断执行上述删除之后取值是否仍能正常运行 printf("请输入你要取值的位置和一个数:\n"); scanf("%d%d",&m,&n); GetElem(L,m,n); if(GetElem(L,m,n)) { printf("该位置的值已经被取出,取出的值是:\n"); printf("%d\n",n); } else { printf("取值位置输入有错误,拜拜!\n"); } printf("表的最终长度是%d\n",L.length); //最后输出一下线性表的长度 return 0; }

运行结果:

转载请注明原文地址: https://www.6miu.com/read-5034570.html

最新回复(0)