线性表的应用:
顺序表的基本操作(动态分配)
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
typedef struct DynamicSqlList{
int *data;
int MaxSize;
int length;
}DynamicSqlList;
void InitListData(DynamicSqlList &L){
L.data = (int*)malloc(sizeof(int)*InitSize);
L.MaxSize = InitSize;
for (int i = 0; i < 6; i++){
L.data[i] = i+1;
L.length=i+1;
}
}
void InitList(DynamicSqlList &L){
L.data = (int*)malloc(sizeof(int)*InitSize);
L.length = 0;
L.MaxSize = InitSize;
}
void IncreaSize(DynamicSqlList &L, int len){
int *p = L.data;
L.data = (int *)malloc(sizeof(int)*(L.length + len));
for (int i = 0; i < L.length; i++){
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize+len;
free(p);
}
bool ListInsert(DynamicSqlList &L,int i,int e){
if (i<1||i>L.length+1){
printf("插入失败\n");
return false;
}
if(i==L.length+1){
IncreaSize(L,InitSize);
}
for (int j = L.length ; j >= i; j--){
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;
L.length++;
return true;
}
bool ListDelet(DynamicSqlList &L,int i ,int &e){
if(i<1||i>L.length){
return false;
}
e = L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1] = L.data[j];
}
L.length--;
return true;
}
bool ListUpdata(DynamicSqlList &L,int i){
if(i<1||i>L.length){
printf("修改第%d个位置的数据失败,请检查修改数据的位置是否符合要求!!!",i);
return false;
}
int e,n;
e = L.data[i-1];
printf("是否修改第%d个位置的%d元素 是【1】 否【2】:",i,e);
scanf("%d",&n);
if(n==1){
printf("输入要修改的元素【e】:");
scanf("%d",&e);
L.data[i-1] = e;
}
if(n==2){
return false;
}
return true;
}
int GetElem(DynamicSqlList &L,int i){
if(i<1||i>L.length){
printf("请检查查找的位置是否符合要求!!!!\n");
return 0;
}
return L.data[i-1];
}
int LocateElem(DynamicSqlList &L, int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
return i+1;
}
}
return 0;
}
void ShowList(DynamicSqlList L){
if(L.length==0){
printf("顺序表无数据\n");
}else{
for (int i = 0; i < L.length; i++){
printf("data[%d]的值为:%d\n",i,L.data[i]);
}
}
}
void Copoer(){
printf("--------------------------------------------\n");
printf("| -----1、顺序表--初始化----- |\n");
printf("| -----2、表数据--插入----- |\n");
printf("| -----3、表数据--删除----- |\n");
printf("| -----4、表数据--修改----- |\n");
printf("| -----5、表数据--查找(按位)----- |\n");
printf("| -----6、表数据--查找(按值)----- |\n");
printf("| -----7、表数据--展示----- |\n");
printf("| -----0、-----退出------- |\n");
printf("|--------------------------------------------\n\n");
}
int main(){
int i,e,m=10;
DynamicSqlList L;
while (m!=0){
Copoer();
printf("请输入要操作的数字:");
scanf("%d",&m);
if(m==1){
printf("是否生成测试数据 【是】1 【否】2(输入2则是空表):");
scanf("%d",&i);
if(i==1){
InitListData(L);
}else{
InitList(L);
}
}
if(m==2){
printf("请输入插入的位置i和要插入的值e:");
scanf("%d,%d",&i,&e);
if(ListInsert(L,i,e)){
printf("第%d个位置数据%d插入成功\n",i,e);
}
}
if(m==3){
int e = -1;
printf("请输入要删除的位置i:");
scanf("%d",&i);
if(ListDelet(L,i,e)){
printf("删除第%d个位置的元素%d成功\n",i,e);
}else{
printf("删除第%d个位置的元素有误\n",i);
}
}
if(m==4){
printf("输入要修改的位置i:");
scanf("%d",&i);
if(ListUpdata(L,i)){
printf("修改成功\n");
}else{
printf("未修改成功\n");
}
}
if(m==5){
printf("输入要查找的位置i:");
scanf("%d",&i);
e = GetElem(L,i);
if(e){
printf("查找的元素为:【%d】\n",e);
}
}
if(m==6){
printf("输入要查找的值:");
scanf("%d",&e);
i = LocateElem(L,e);
if(i){
printf("您查找的值%d所在位序为:%d\n",e,i);
}else{
printf("您查找的值%d不存在!!!!!!\n",e);
}
}
if(m==7){
ShowList(L);
}
if(m==0){
return 0;
}
}
return 0;
}
注:本程序在vscode上编译运行的,在输入数据时输入的数据之间用“,”逗号隔开。其他的编译软件输入的数据之间应该只需要敲空格。
如有任何问题,欢迎各位留言评论,谢谢!!!!
|