#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Windows.h>
#define MAXSIZE 20
typedef struct
{
int data[MAXSIZE];
int size;
}SeqList;
//初始化
void init_SeqList1(SeqList* list)
{
for (int i = 0; i < MAXSIZE; i++)
{
list->data[i] = 0;
}
list->size = 0;
}
//创建顺序表
void create_SeqList1(SeqList* list)
{
int len;
printf("请输入要创建的顺序表的长度:");
scanf_s("%d", &len);
for (int i = 0; i < len; i++)
{
scanf_s("%d", &list->data[i]);
list->size++;
}
}
//冒泡排序
void bubbleSort_SeqList(SeqList* list)
{
for (int i = 0; i < list->size - 1; i++)
{
for (int j = 0; j < list->size - i - 1; j++)
{
if (list->data[j] > list->data[j + 1])
{
int temp = list->data[j];
list->data[j] = list->data[j + 1];
list->data[j + 1] = temp;
}
}
}
}
//查找data是否在表中,并进行相关操作
void findDataFrom_SeqList(SeqList* list, int data)
{
int left = 0, right = list->size - 1, mid;
//二分查找
while (left <= right)
{
mid = (left + right) / 2;
if (data == list->data[mid])
{
//找到让当前元素与后一个元素交换
int temp = list->data[mid];
list->data[mid] = list->data[mid + 1];
list->data[mid + 1] = temp;
break;
}
else
if (data < list->data[mid])
right = mid - 1;
else
left = mid + 1;
}
//没找到插入到顺序表中并使顺序表仍有序
if (left > right)
{
//此时left位置即为元素的插入位置
for (int i = list->size - 1; i >= left; i--)
list->data[i + 1] = list->data[i]; //将left及以后的元素后移让出插入位
list->data[left] = data;//插入元素
list->size++;
}
}
//打印
void printf_SeqList1(SeqList* list)
{
for (int i = 0; i < list->size; i++)
{
printf("%d ", list->data[i]);
}
printf("\n");
}
int main(void)
{
SeqList list;
int data;
init_SeqList1(&list);
create_SeqList1(&list);
bubbleSort_SeqList(&list);
printf("初始顺序表为:\n");
printf_SeqList1(&list);
printf("请输入要查找的数据:");
scanf_s("%d", &data);
findDataFrom_SeqList(&list, data);
printf("查找操作后的顺序表为:\n");
printf_SeqList1(&list);
system("pause");
return EXIT_SUCCESS;
}