实验内容:1、输入一组整形元素序列,建立顺序表L,并随机添加5个元素。 2、逐个显示该顺序表中的元素; 3、在顺序表L 中第i个数据元素之前插入一个元素e。插入前表长 n=L->1ast+1。 4、删除顺序表L中第i个元素:用c语言写
时间: 2024-11-09 17:27:30 浏览: 23
实验内容主要包括以下几个步骤:
1. **创建顺序表**:首先,你需要定义一个结构体表示整型元素,并初始化一个顺序表L,通常通过数组或者链表形式存储。输入一组整数作为初始元素,然后随机选择5个元素通过循环插入到这个列表中。
```c
typedef struct Node {
int data; // 整型数据元素
struct Node* next; // 指向下一个节点的指针
} ListNode;
ListNode* createList(int n) {
ListNode* L = (ListNode*)malloc(sizeof(ListNode)*n);
return L;
}
// 随机插入元素
void randomInsert(ListNode* L, int elements[]) {
srand(time(NULL)); // 设置随机种子
for (int i = 0; i < 5; i++) {
int index = rand() % n; // 随机索引
insertElement(L, elements[index], index);
}
}
```
2. **遍历和显示元素**:使用循环遍历顺序表,打印每个元素。
```c
void displayList(ListNode* L) {
ListNode* temp = L;
while (temp != NULL) {
printf("%d ", temp->data); // 打印当前元素
temp = temp->next;
}
printf("\n");
}
```
3. **插入元素**:在指定位置`i`插入元素`e`,这里假设已经有一个辅助函数`insertElement`实现插入操作。
```c
void insertElement(ListNode* L, int e, int index) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = e;
newNode->next = L[index]; // 将新节点插入到对应位置
if (index == 0) { // 如果插入在头部
L = newNode;
} else {
ListNode* prev = L;
while (prev->next != L[index]) {
prev = prev->next;
}
prev->next = newNode;
}
n++; // 表示插入后表长增加1
}
```
4. **删除元素**:同样需要一个`deleteElement`函数,用于删除第`i`个元素。如果顺序表是链表,可以简单地将`i`位置的`next`指向`i+1`位置的元素,然后释放`i`位置的节点;如果是数组,则需要移动后续元素覆盖掉被删除的位置。
```c
void deleteElement(ListNode* L, int i) {
if (i < 0 || i >= n) {
printf("Invalid index.\n"); // 检查索引是否合法
return;
}
if (i == 0) {
ListNode* temp = L->next;
free(L);
L = temp;
} else {
ListNode* prev = L;
while (prev->next != L[i]) {
prev = prev->next;
}
prev->next = prev->next->next; // 删除元素
}
n--; // 表示删除后表长减1
}
```
阅读全文