C语言设计和编写程序用结构体数组:定义、创建和显示顺序表L(表中的数据类型为整型),编写函数实现 非递减顺序表L,插入一个元素e后,L仍然是非递减的。
时间: 2024-11-10 11:26:28 浏览: 40
在C语言中,我们可以使用结构体数组和链表的方式设计一个非递减的顺序表,其中表中的数据类型为整型。首先,我们需要定义一个结构体表示列表节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义列表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} ListNode;
// 定义顺序表结构体,包含头结点和长度
typedef struct SequenceList {
ListNode* head; // 表头指针
int length; // 列表长度
} SequenceList;
```
接下来,我们定义创建、显示顺序表以及插入元素的函数:
```c
// 创建一个空的顺序表
SequenceList* createSequenceList() {
SequenceList* list = (SequenceList*)malloc(sizeof(SequenceList));
list->head = NULL;
list->length = 0;
return list;
}
// 插入元素保持非递减性
void insertSorted(int e, SequenceList* L) {
if (L->head == NULL || e >= L->head->data) { // 如果表为空或新元素大于等于当前最大值
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = e;
newNode->next = L->head;
L->head = newNode;
} else {
ListNode* current = L->head;
while (current->next != NULL && current->next->data < e) {
current = current->next;
}
if (current->next != NULL) {
current->next->data = e;
} else {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = e;
current->next = newNode;
}
}
L->length++;
}
// 显示顺序表
void displaySequenceList(SequenceList* L) {
if (L->head == NULL) {
printf("顺序表为空.\n");
} else {
printf("顺序表内容(升序):\n");
ListNode* temp = L->head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
}
int main() {
SequenceList* L = createSequenceList();
// 插入一些元素并显示
insertSorted(5, L);
displaySequenceList(L);
insertSorted(3, L);
displaySequenceList(L);
return 0;
}
```
在这个例子中,`insertSorted` 函数会确保插入的新元素始终保持列表的非递减性。在`main`函数中展示了如何创建、插入元素并查看排序后的列表。
阅读全文