实验目的:
数据结构学完了,现在分享一下曾经学过的知识,帮助需要学习的小伙伴,第一次做文章,写的不怎么详细,但是相信大家能看懂代码的,可能有些问题处理的不好,有问题请指出,不喜勿碰,谢谢大家!
- 掌握顺序表的存储结构
- 掌握顺序表的基本操作
- 掌握顺序表的基本特性
实验内容:
- 存储结构
typedef int DataType; //DataType可以是int, float或char
typedef struct
{
int length; //用于描述线性表的实际元素个数
DataType data[MAX]; //一维数组data用于存放表结点元素
}SeqList; - void InitList(SeqList *L)//初始化
- int Length(SeqList *L)//求长度
- void CreateList(SeqList *L,int n)//输入n个数据元素
- void DispList(SeqList *L)//输出线性表
- DataType Get(SeqList *L,int i)//获取下标为i的数据元素
- int Locate(SeqList *L,DataType x)//获取数据元素x的下标
- int Insert(SeqList *L,int i,DataType x)//在下标为i的位置插入x数据元素
- int Insert2(SeqList *L,DataType x)//有序插入数据元素x
- int Delete(SeqList *L,int i)//删除下标为i的数据元素
- void order(SeqList *L)//冒泡排序
实验核心代码:
//顺序表操作
#include<stdio.h>
#include<windows.h>
#define MAX 100//最大存储数
int ch,x,n;
typedef int DataType;
typedef struct
{
DataType data[MAX];
int length;
}SeqList;
SeqList L;
//自定义函数
void InitList(SeqList *L);//初始化
int Length(SeqList *L);//求长度
void CreateList(SeqList *L,int n);//输入n个数据元素
void DispList(SeqList *L);//输出线性表
DataType Get(SeqList *L,int i);//获取下标为i的数据元素
int Locate(SeqList *L,DataType x);//获取数据元素x的下标
int Insert(SeqList *L,int i,DataType x);//在下标为i的位置插入x数据元素
int Insert2(SeqList *L,DataType x);//有序插入数据元素x
int Delete(SeqList *L,int i);//删除下标为i的数据元素
void order(SeqList *L);//冒泡排序
void menu();
//主函数
int main()
{
SeqList *L;
menu();
return 0;
}
//初始化
void InitList(SeqList *L)
{
L->length=0;
printf("初始化成功\n");
system("pause");
menu();
}
//求长度
int Length(SeqList *L)
{
return L->length;
}
//输入n个数据元素
void CreateList(SeqList *L,int n)
{
L->length+=n;
printf("请输入元素的值\n");
for(int i=0;i<=n-1;i++)
{
scanf("%d",&L->data[i]);
}
system("pause");
menu();
}
//输出线性表
void DispList(SeqList *L)
{
for(int i=0;i<=L->length-1;i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
system("pause");
menu();
}
//获取下标为i的数据元素
DataType Get(SeqList *L,int i)
{
if(i>0&&i<=L->length-1)
{
printf("第%d个元素是%d\n",i,L->data[i-1]);
}
else
{
printf("数据范围错误!\n");
}
}
//获取数据元素x的下标
int Locate(SeqList *L,DataType x)
{
int count=0;
for(int i=0;i<Length(L);i++)
{
if(x==L->data[i])
{
printf("元素下标为%d",i);
system("pause");
menu();
}
else
{
printf("没有此元素!");
system("pause");
menu();
}
}
}
//在下标为i的位置插入x数据元素
int Insert(SeqList *L,int i,DataType x)
{
if(i-1>MAX||i<0)
{
printf("输入的位置有误");
system("pause");
menu();
}
for(int j=L->length;j>=i;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i-1]=x;
L->length++;
printf("插入成功");
system("pause");
menu();
}
//有序插入数据元素x
int Insert2(SeqList *L,DataType x)
{
//判断原数组的顺逆序order=0无序,order=1顺序,order=2逆序
int order=0;
for(int i=0;i<L->length-1;i++)
{
if(L->data[i+1]>=L->data[i])
{
order=1;
}
else
{
order=0;
}
}
if(order==1)
{
for(int i=0;i<L->length-1;i++)
{
if(x>=L->data[i]&&x<=L->data[i+1])
{
for(int j=L->length;j>i;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i+1]=x;
L->length++;
printf("插入成功\n");
system("pause");
menu();
}
}
}
for(int i=0;i<L->length-1;i++)
{
if(L->data[i+1]<=L->data[i])
{
order=2;
}
else
{
order=0;
}
}
if(order==2)
{
for(int i=0;i<L->length-1;i++)
{
if(x<=L->data[i]&&x>=L->data[i+1])
{
for(int j=L->length;j>i;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i+1]=x;
L->length++;
printf("插入成功\n");
system("pause");
menu();
}
}
}
if(order==0)
{
printf("原数组无序\n");
system("pause");
menu();
}
}
//删除下标为i的数据元素
int Delete(SeqList *L,int i)
{
if(i-1>MAX||i<=0)
{
printf("输入的位置有误\n");
system("pause");
menu();
}
else
{
for(int j=i-1;j<L->length;j++)
{
L->data[j]=L->data[j+1];
}
L->data[L->length-1]=NULL;
L->length=L->length-1;
printf("删除成功\n");
}
system("pause");
menu();
}
//冒泡排序
void order(SeqList *L)
{
int temp;
printf("冒泡排序的结果是:\n");
for(int i=0;i<L->length-1;i++)
{
for(int j=0;j<L->length-1-i;j++)
{
if(L->data[j]>=L->data[j+1])
{
temp=L->data[j];
L->data[j]=L->data[j+1];
L->data[j+1]=temp;
}
}
}
for(int i=0;i<=L->length-1;i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
system("pause");
menu();
}
//界面
void menu()
{
//system("mode con cols=80 lines=45");
system("color F0");
printf("1.初始化\n");
printf("2.返回元素个数\n");
printf("3.输入n个数据元素\n");
printf("4.输出线性表\n");
printf("5.查找i位置的数据元素\n");
printf("6.查找数据x对应的位置\n");
printf("7.在i位置插入x\n");
printf("8.有序插入数据元素x\n");
printf("9.删除下标为i的数据元素\n");
printf("10.冒泡排序\n");
printf("0.退出程序\n");
printf("请输入选择:\n");
scanf("%d",&ch);
switch(ch)
{
case 0:
exit(0);
break;
case 1:
InitList(&L);
break;
case 2:
printf("顺序表的长度为%d\n",Length(&L));
system("pause");
menu();
break;
case 3:
printf("请输入元素的个数\n");
scanf("%d",&n);
CreateList(&L,n);
break;
case 4:
printf("输出结果如下:\n");
DispList(&L);
break;
case 5:
printf("请输入要获得的元素的位置:") ;
scanf("%d",&x);
Get(&L,x);
system("pause");
menu();
break;
case 6:
printf("请输入要获得的数据元素:");
scanf("%d",&x);
Locate(&L,x);
system("pause");
menu();
break;
case 7:
printf("请输入要插入的位置:\n");
scanf("%d",&n);
printf("请输入要插入的值:\n");
scanf("%d",&x);
Insert(&L,n,x);
break;
case 8:
printf("请输入要插入的数值:\n");
scanf("%d",&x);
Insert2(&L,x);
break;
case 9:
printf("请输入要删除的数下标:\n");
scanf("%d",&x);
Delete(&L,x);
break;
case 10:
order(&L);
break;
default:
printf("请输入0-10之内的数");
menu();
break;
}
}
结束语:
制作不易,感谢支持!
有需要的小伙伴,记得私信哦~~
一件三连,谢谢大家,后续陆续更新~