编译环境:VS code
简单说明:
C语言中不含有引用类型,所以我使用C++的环境来进行相关代码的编写,这里代码的书写参照的是**严蔚敏版的《数据结构》**下面是相关的代码。
#include<cstdio>
#include<cstdlib> //#include <stdio.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef struct
{
int data[MAXSIZE];
int length;
}Sqlist;
Sqlist L;
void initList(Sqlist &L); //初始化顺序表
int insertElem(Sqlist &L,int p,int e); //插入数据
int deleteElem(Sqlist &L,int p,int &e); //删除数据
int findElem(Sqlist L,int e,int &p); //按值查找数据
int getElem(Sqlist L,int p,int &e); //查找指定位置数据
void Input(Sqlist &L,int a); //输入
void Output(Sqlist L); //输出
void destroyList(Sqlist &L); //销毁
int main(void)
{
int flag = 1;
int do_it;
int number;
int position;
int information;
int delete_data;
int find_data;
int position_data;
int find_position;
while (flag)
{
printf("**********菜单栏**********\n");
printf("1.初始化\n");
printf("2.输入\n");
printf("3.插入数据\n");
printf("4.删除数据\n");
printf("5.按值查找数据\n");
printf("6.指定位置查找数据\n");
printf("7.输出\n");
printf("8.销毁\n");
printf("9.退出\n");
printf("**********菜单栏**********\n");
printf("请输入要执行的功能:");
scanf("%d",&do_it);
if (do_it < 1 || do_it >9)
{
printf("输入错误,请重新输入!\n");
}
else
{
switch (do_it)
{
case 1:
initList(L);
break;
case 2:
printf("请输入要输入的数据个数:");
scanf("%d",&number);
Input(L,number);
break;
case 3:
printf("请输入要插入的位置:");
scanf("%d",&position);
printf("请输入要插入的数据:");
scanf("%d",&information);
if(insertElem(L,position,information))
{
printf("插入成功!\n");
printf("\n");
}
else
{
printf("插入失败!\n");
printf("\n");
}
break;
case 4:
printf("请输入要删除的位置:");
scanf("%d",&position);
if(deleteElem(L,position,delete_data))
{
printf("删除成功!删除的数据为:%d\n",delete_data);
printf("\n");
}
else
{
printf("删除失败!\n");
printf("\n");
}
break;
case 5:
printf("请输入要查找的数据:");
scanf("%d",&find_data);
if (findElem(L,find_data,find_position))
{
printf("查询成功!所在位置:%d\n",find_position);
printf("\n");
}
else
{
printf("查询失败!\n");
printf("\n");
}
break;
case 6:
printf("请输入要查询数据的位置:");
scanf("%d",&position);
if (getElem(L,position,position_data))
{
printf("查询成功!该数据为:%d\n",position_data);
printf("\n");
}
else
{
printf("查询失败!\n");
printf("\n");
}
break;
case 7:
Output(L);
break;
case 8:
destroyList(L);
break;
case 9:
flag = 0;
break;
}
}
}
system("pause");
return 0;
}
void initList(Sqlist &L)
{
L.length = 0;
printf("已初始化,表长为:%d",L.length);
printf("\n");
}
void Input(Sqlist &L,int a)
{
L.length = a;
for(int i =0;i < a;i++)
{
printf("请输入数据:");
scanf("%d",&L.data[i]);
}
printf("输入完成,现在表长为:%d",L.length);
printf("\n");
}
int insertElem(Sqlist &L,int p,int e)
{
if (p < 1 || p > L.length)
{
return ERROR;
}
else
{
for (int i = L.length - 1; i >= p - 1; i--)
{
L.data[i+1] = L.data[i];
}
L.data[p-1] = e;
L.length++;
return OK;
}
}
int deleteElem(Sqlist &L,int p,int &e)
{
if (p < 1 || p > L.length)
{
return ERROR;
}
else
{
e = L.data[p-1];
for (int i = p - 1; i < L.length - 1; i++)
{
L.data[i] = L.data[i+1];
}
L.length--;
return OK;
}
}
int findElem(Sqlist L,int e,int &p)
{
for(int i = 0;i < L.length;i++)
{
if(L.data[i] == e)
{
p = i + 1;
return OK;
}
}
return ERROR;
}
int getElem(Sqlist L,int p,int &e)
{
if(p < 1 || p > L.length)
{
return ERROR;
}
else
{
e = L.data[p-1];
return OK;
}
}
void Output(Sqlist L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d ",L.data[i]);
}
printf("\n");
}
void destroyList(Sqlist &L)
{
L.length = 0;
}
这里需要注意的是源文件的命名后缀为**.cpp**,而不是**.c**。因为使用到了C++的引用。事实上,严的数据结构在顺序表这块,令人迷惑的主要的是函数引用的问题,理解好了引用,在代码实现这一块几乎是没有大的障碍了。
写下这篇博客希望与大家一同分享、学习、交流,如果您想联系我,可以直接发私信或者发邮件到我的邮箱:1308269670@qq.com。
最后希望这篇文章对您有帮助。