用C语言1. 先依次输入元素为简单类型(int、char)或自定义结构体类型(如订单信息或学生信息或员工信息)的数个数据元素建立顺序存储的线性表,然后①以该线性表为查找表进行顺序查找;②用冒泡排序对该线性表按某个关键字值进行排序,在排序之后的线性表之上进行折半查找。
时间: 2024-02-17 10:04:45 浏览: 65
C#数据结构(顺序表,单链表,顺序表应用,冒泡排序,折半查找)
5星 · 资源好评率100%
好的,这是一个比较复杂的问题,需要分步骤来实现。首先,我们需要定义一个结构体来表示订单信息,如下所示:
```c
typedef struct {
int order_id;
char customer_name[50];
int quantity;
float price;
} OrderInfo;
```
接下来,我们可以定义一个动态数组来存储这些订单信息,使用 `realloc` 来动态扩展数组的大小。
```c
#define INIT_SIZE 10
#define INCREMENT 5
typedef struct {
OrderInfo* data;
int length;
int size;
} SeqList;
void InitList(SeqList* L) {
L->data = (OrderInfo*)malloc(INIT_SIZE * sizeof(OrderInfo));
L->length = 0;
L->size = INIT_SIZE;
}
void InsertList(SeqList* L, OrderInfo e) {
if (L->length == L->size) {
L->data = (OrderInfo*)realloc(L->data, (L->size + INCREMENT) * sizeof(OrderInfo));
L->size += INCREMENT;
}
L->data[L->length++] = e;
}
```
接下来,我们可以编写一个函数来输入订单信息,并将其插入到动态数组中。
```c
void InputOrderInfo(OrderInfo* p) {
printf("Enter order id: ");
scanf("%d", &p->order_id);
printf("Enter customer name: ");
scanf("%s", p->customer_name);
printf("Enter quantity: ");
scanf("%d", &p->quantity);
printf("Enter price: ");
scanf("%f", &p->price);
}
void InputList(SeqList* L) {
int n;
printf("Enter the number of order infos: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
OrderInfo e;
InputOrderInfo(&e);
InsertList(L, e);
}
}
```
现在,我们已经可以输入订单信息并将其存储到动态数组中了。接下来,我们需要实现顺序查找和冒泡排序。
```c
void PrintOrderInfo(OrderInfo e) {
printf("Order id: %d, Customer name: %s, Quantity: %d, Price: %.2f\n", e.order_id, e.customer_name, e.quantity, e.price);
}
void PrintList(SeqList L) {
for (int i = 0; i < L.length; i++) {
PrintOrderInfo(L.data[i]);
}
}
int SeqSearch(SeqList L, int order_id) {
for (int i = 0; i < L.length; i++) {
if (L.data[i].order_id == order_id) {
return i;
}
}
return -1;
}
void BubbleSort(SeqList* L) {
for (int i = 0; i < L->length - 1; i++) {
for (int j = 0; j < L->length - i - 1; j++) {
if (L->data[j].order_id > L->data[j + 1].order_id) {
OrderInfo temp = L->data[j];
L->data[j] = L->data[j + 1];
L->data[j + 1] = temp;
}
}
}
}
```
最后,我们来实现折半查找。
```c
int BinarySearch(SeqList L, int order_id) {
int low = 0, high = L.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (L.data[mid].order_id == order_id) {
return mid;
} else if (L.data[mid].order_id > order_id) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
```
现在,我们已经实现了输入订单信息、顺序查找、冒泡排序和折半查找的功能。完整代码如下所示:
阅读全文