数据结构之顺序表
顺序表的思想容易了解,但是代码不容易掌握,我这里根据老师所提供的代码进行一下简单的总结
这个代码包含顺序表的查找,插入,删除,建表,输出数据
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;
#define MAXSIZE 100
typedef struct{
Elemtype *elem;
int Length;
}Sqlist;
Status InitList_Sq(Sqlist &L){//建立一个顺序表
L.elem=new Elemtype[MAXSIZE];
if(!L.elem)//判断是否为空
exit(OVERFLOW);
L.Length=0; //线性表初始值为0
return OK;//建好之后返回
}
Status LocateElem_Sq(Sqlist L,int n){//对线性表进行处理,找出要求的数字
for(int i=0;i<L.Length;i++) //一定要注意Sqlist L与Sqlist &L的区别
if(L.elem[i]==n)
return i+1;
return 0;
}
Status ListInsert_Sq(Sqlist &L,int i,Elemtype b){//插入所需要的数字
if(i<0||L.Length+1<i)
return ERROR;
if(i>=MAXSIZE)
return ERROR;
for(int r=L.Length-1;r>=i-1;r--){
L.elem[r+1]=L.elem[r]; //对顺序表进行处理,插入目标数据
// cout<<L.elem[r+1];
}
// cout<<"执行了"<<endl;
L.elem[i-1]=b;
L.Length++;
// for(int t=0;t<L.Length;t++)
// cout<<L.elem[t]<<" ";
// cout<<L.Length<<endl;
return OK;
}
Status ListDelete_Sq(Sqlist &L,int m,Elemtype &temp){//删除所指定的数字
if(m<0||m>L.Length) //判断是否异常
return ERROR;
if(m>=MAXSIZE)//判断是否异常
return ERROR;
temp=L.elem[m-1];
for(int j=m;j<=L.Length;j++) //对顺序表进行处理,删除目标数据
L.elem[j-1]=L.elem[j];
L.Length--;
// for(int i=0;i<L.Length;i++)
// cout<<L.elem[i]<<" ";
return OK;
}
int main(){
Sqlist L;
int i,j,k,t,n,m,choose;
int a,b,c,d,e,number,flag;
cout<<"1. 建立顺序表\n";
cout<<"2. 输入数据\n";
cout<<"3. 查找\n";
cout<<"4. 插入\n";
cout<<"5. 删除\n";
cout<<"6. 输出数据\n";
cout<<"0. 退出\n\n";
choose=-1;
while(true){
cout<<"请选择你的操作:\n";
cin>>choose;
if(!choose)
break;
switch(choose){
case 1:
if(InitList_Sq(L))
cout<<"顺序表建立成功!\n";
else
cout<<"顺序表建立失败!\n";
break;
case 2:
cout<<"请输入要建表的数字的个数:\n";
cin>>number;
cout<<"请输入"<<number<<"个数字:\n";
for(i=0;i<number;i++)
cin>>L.elem[i];
L.Length=number;
cout<<endl;
break;
case 3:
cout<<"请输入要查找的数字:\n";
cin>>n;
flag=LocateElem_Sq(L,n);
if(flag)
cout<<n<<"是第"<<flag<<"个数 。";
else
cout<<"顺序表中不存在该数字!请确认。。。";
cout<<endl;
break;
case 4:
cout<<"请输入两个数字,分别代表插入的位置和插入的数字:\n";
cin>>a>>b;
if(ListInsert_Sq(L,a,b))
cout<<"插入成功!";
else
cout<<"插入失败!";
cout<<endl<<endl;
break;
case 5:
cout<<"请输入要删除的数字的位置:\n\n";
cin>>m;
//flag=;
if(ListDelete_Sq(L,m,d))
cout<<"删除成功!\n要删除的数字是:"<<d<<endl<<endl;
else
cout<<"删除失败!"<<endl<<endl;
break;
case 6:
cout<<"当前顺序表为:\n";
for(j=0;j<L.Length;j++)
cout<<L.elem[j]<<" ";
cout<<endl<<endl;
break;
default:
break;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理