🎯目的:
1、熟悉VC环境的使用以及程序的输入,编辑,调试,运行的全过程。
2、掌握线性表的顺序结构的静态及操作特点。
3、掌握线性表的顺序结构的静态存储和常见操作在C语言环境中的实现方法。
🎯内容:
1、实现顺序表的定义并创建顺序表。
2、实现线性表顺序存储结构下元素的插入操作。
3、实现线性表顺序存储结构下元素的删除操作。
4、实现线性表顺序存储结构下取元素操作。
🎯环境:
TC或VC++。
🎯步骤:
🎐1、顺序表的存储定义。
typedef struct { //定义顺序表 ElemType *elem; int length; } SqList;
🎐2、顺序表的初始化,构造一个空的顺序表。
Status InitList(SqList &L) //创建顺序表 {}
🎐3、从键盘上依次输入21、18、30、75、42、56,创建顺序表。
void InputList(SqList &L, int n) //输入顺序表的内容(此函数也可以为void InputList(SqList &L),可根据实际情况编写) {}
🎐4、输出顺序表中的各元素值。
void OutputList(SqList L) //输出顺序表中各元素的值 {}
🎐5、要求如果分别在顺序表的第3个位置和第9个位置插入数据时,能够给出插入成功或失败的信息,并输出顺序表中的各元素值。
Status ListInsert(SqList &L, int i, ElemType e) {}
🎐6、要求如果删除顺序表中的第6个数据元素和第8个数据元素,能够针对不同情况给出删除成功或失败的信息,并输出单链表中的各元素值。
Status ListDelete(SqList &L, int i) {}
🎐7、要求如果取顺序表中的第5个数据元素和第7个数据元素时,可以给出对应的提示信息,如果能取到,请输出该值。
Status GetElem(SqList L, int i, ElemType &e) {}
🎐8、查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。
int LocateElem(SqList L, ElemType e) {}
🎯 完整代码:
#include "iostream" using namespace std; #define ERROR 0 #define OVERFLOW -1 #define MAX 50 #define OK 1 typedef int Status; typedef struct{//定义顺序表 int *elem; int length; }SqList; Status InitList(SqList &L){//创建顺序表 L.elem=new int[MAX];//为顺序表分配大小为MAX的数组空间 if(!L.elem) return OVERFLOW;//验证分别配空间是否成功 L.length=0;//表长设置为0 return OK; } void InputList(SqList &L,int n){//输入表中的内容 for(int i=0;i<n;i++){ cin>>L.elem[i]; L.length++; } } void OutputList(SqList L){//输出表中的值 cout<<"表中的值为:"; for(int i=0;i<L.length;i++){ printf("%-3d ",L.elem[i]); } cout<<'\n'; } Status ListInsert(SqList &L,int i,int e){//元素插入 //可插入的位置1<=i<=L.length+1 if(i<1||i>L.length+1) return ERROR;//表示i的值不合法 if(L.length==MAX) return ERROR;//表示空间已满 for(int j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j];//从最后一个元素往后移 L.elem[i-1]=e; L.length++; //长度加1 return OK; } Status ListDelete(SqList &L,int i){//元素的删除 //可删除的位置1<=i>=L.length if(i<1||i>L.length) return ERROR; for(int j=i-1;j<L.length;j++) L.elem[j]=L.elem[j+1];//从第i+1个元素往前移 L.length--; //长度减一 return OK; } Status GetElem(SqList L,int i,int &e){//取出表中的值 //可取的位置1<=i<=L.length if(i<1||i>L.length) return ERROR;//表示i的值不合法 e=L.elem[i-1];//将第i个值付赋给了e return OK; } int LocateElem(SqList L, int e){//查找值的位置 for(int i=0;i<L.length;i++){ if(L.elem[i]==e) return i+1; } return 0; //查找失败 } int main(){ SqList L; int n,choose,t,i,e; printf("1.创建顺序表\n"); printf("2.输入\n"); printf("3.输出\n"); printf("4.插入\n"); printf("5.删除\n"); printf("6.取值\n"); printf("7.查找\n"); printf("0.退出\n"); cout<<"请输入您的选择:"; cin>>choose; while(1){//一直循环,直到用break打破为止 if(choose==0){ cout<<"您已退出!\n"; break; } switch(choose){//判断用户的选择 case 1: if(InitList(L)==1) cout<<"顺序表创建成功!\n"; else cout<<"顺序表创建失败!\n"; break; case 2: cout<<"请您输入要输入元素的个数:"; cin>>n; InputList(L,n); break; case 3: OutputList(L); break; case 4: cout<<"请输入您要插入的位置:"; cin>>i; cout<<"请输入您要在此处插入的值:"; cin>>e; t=ListInsert(L,i,e); if(t!=1) cout<<"插入位置不合法!!!\n"; else OutputList(L); break; case 5: cout<<"请输入您要删除的位置:"; cin>>i; t=ListDelete(L,i); if(t!=1) cout<<"删除位置不合法!!!\n"; else OutputList(L); break; case 6: cout<<"请输入您要取的值的位置:"; cin>>i; t=GetElem(L,i,e); if(t!=1) cout<<"取值位置不合法\n"; else cout<<"第"<<i<<"个元素是"<<e<<endl; break; case 7: cout<<"请输入您要查找的值:"; cin>>e; t=LocateElem(L,e); if(t==0) cout<<"您查找的值不在表中\n"; else cout<<"元素"<<t<<"的位置在第"<<t<<"个"<<endl; break; default: cout<<"您的输入有误"<<endl; } cout<<"请输入您的选择:"; cin>>choose; } return 0; }