1、实现目标:
随机产生n个100以内整数生成一个顺序存储的线性表,并且实现以下功能:
2、实现
排序:采用冒泡排序法,实现两种从大---->小或者小---->大的排序
建表:采用的是随机数srand生成种子,再用 rand() % 100生成100以内整数
好像没什么好说的
3、实现代码
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100
typedef struct
{
int data[MAX];
int listlen;
}sqList;
//菜单显示
void Menu()
{
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ MENU ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ 1 排序 ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ 2 插入 ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ 3 删除 ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ 4 输出第i位的数据及前驱和后继 ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ 5 循环右移m位 ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
printf("■ 6 退出 ■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
}
//随机产生n个100以内整数的顺序存储线性表
void Create(sqList* list)
{
srand((unsigned)time(NULL));//srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同
int i, n;
printf("选择形成多少个数的线性表:");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
list->data[i] = rand() % 100; //0~99,不包含100
}
list->listlen = n;
}
//排序
//使用的是冒泡排序,可供选择,从大到小或者从小到大排序
void Sort(sqList* list)
{
int i, j,temp,choice;
do
{
printf("\n请选择排序方式:\n1 从小到大排序\n2 从大到小排序\n");
scanf("%d",&choice);
//从小到大排序
if (choice==1)
{
for (i = list->listlen; i > 1; i--)
{
for (j = 1; j < i; j++)
{
if (list->data[j - 1] > list->data[j])
{
temp = list->data[j];
list->data[j] = list->data[j - 1];
list->data[j - 1] = temp;
}
}
}
}
//从大到小排序
if (choice==2)
{
for (i = list->listlen; i > 1; i--)
{
for (j = 1; j < i; j++)
{
if (list->data[j - 1] < list->data[j])
{
temp = list->data[j];
list->data[j] = list->data[j - 1];
list->data[j - 1] = temp;
}
}
}
}
} while (choice!=1&&choice!=2);
}
//插入
//设置返回值为整型,首先是因为c语言无bool类型,其次这是为了确认插入是否成功,所以需要返回0 1进行判断
int Insert(sqList* list, int i,int num)//这里的i变量是表示插入的位置
{
int j;
if (i<1 || i>list->listlen + 1)
{
printf("插入位置有误,请重试!\n");
return 0;//插入失败
}
if (list->listlen == MAX)
{
printf("当前存储空间已满,无法插入!\n");
return 0;//插入失败
}
for (j = list->listlen - 1; j >= i - 1; j--)
{
list->data[j + 1] = list->data[j];
}
list->data[i - 1]= num;
list->listlen++;
return 1;
}
//删除
int Delete(sqList* list, int i)
{
int j;
if (i<1 || i>list->listlen)
{
printf("删除位置有误,请重试!\n");
return 0;//插入失败
}
for (j = i; j < list->listlen; j++)
{
list->data[j - 1]= list->data[j];
}
list->listlen--;
return 1;
}
//输出显示
void Out(sqList* list)
{
int i;
for (i = 0; i < list->listlen; i++)
{
printf("%-4d", list->data[i]);
}
}
//输出第i位的数据及前驱和后继
void Locate(sqList*list, int i)
{
if (i==1)
{
printf("第%d位的数据是%d,无前驱,其后继是%d", i, list->data[i - 1], list->data[i + 1]);
}
if (i==list->listlen)
{
printf("第%d位的数据是%d,其前驱是%d,无后继", i, list->data[i - 1], list->data[i - 2]);
}
if (i>1&&i<list->listlen)
{
printf("第%d位的数据是%d,其前驱和后继分别是%d和%d", i, list->data[i - 1], list->data[i - 2], list->data[i + 1]);
}
}
//循环右移m位
void Move(sqList*list,int m)
{
int i;
while (m--)
{
int temp = list->data[list->listlen - 1];
for (i=list->listlen-1;i>=1;i--)
{
list->data[i] = list->data[i - 1];
}
list->data[0] = temp;
}
}
int main()
{
sqList* Llist;
int i, num, m;
int choice;
Llist = (sqList*)malloc(sizeof(sqList));
Create(Llist);
Out(Llist);
getch();
system("cls");
do
{
Menu();
printf("请选择你要的操作 select(1-6):");
scanf("%d", &choice);
switch (choice)
{
case 1:Out(Llist);
Sort(Llist);
printf("排序后:\n");
Out(Llist);
getch();
system("cls");
break;
case 2:Out(Llist);
printf("\n请按顺序输入要插入的位置,以及插入的数值:");
scanf("%d%d", &i, &num);
if (Insert(Llist, i, num) == 1)
{
Out(Llist);
}
getch();
system("cls");
break;
case 3:Out(Llist);
printf("\n请选择要删除的位置:");
scanf("%d", &i);
if (Delete(Llist, i) == 1)
{
Out(Llist);
}
getch();
system("cls");
break;
case 4:Out(Llist);
do
{
printf("\n请选择要输出的位置:");
scanf("%d", &i);
if (i > Llist->listlen || i < 1)
{
printf("请输入正确的输出位置!\n");
}
} while (i > Llist->listlen || i < 1);
Locate(Llist, i);
getch();
system("cls");
break;
case 5:Out(Llist);
printf("\n请选择循环右移的位数:");
scanf("%d", &m);
Move(Llist, m);
Out(Llist);
getch();
system("cls");
break;
case 6:
break;
default:
printf("请不要乱输入选项!\n");
break;
}
} while (choice != 6);
system("cls");
printf("感谢您本次使用");
return 0;
}