设计定义头文件SeqList.h,给出顺序表结构和操作(5个)的定义;然后设计定义源文件(main.c)将1、2、3、4、5、6、7、8、9、10存入顺序表中,然后,在元素5前插入100,打印输出顺序表元素个数和所有元素(使用顺序表的相关操作函数完成)。
时间: 2024-10-21 20:05:15 浏览: 54
首先,我们来创建一个名为`SeqList.h`的头文件,用于定义顺序列表的数据结构和基本操作:
```cpp
// SeqList.h
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
typedef struct SeqList {
ListNode* head;
int size;
} SeqList;
// 初始化顺序列表
SeqList* seqListCreate();
// 插入节点到列表头部
void insertAtHead(SeqList*, int);
// 打印列表元素
void printList(SeqList*);
// 删除指定位置的节点并返回其值
int deleteNodeAt(int, SeqList*);
// 获取列表大小
int listSize(SeqList*);
#endif // _SEQLIST_H_
```
接下来,我们将编写`main.c`源文件,实现对顺序列表的操作:
```cpp
// main.c
#include "SeqList.h"
// 实现函数
SeqList* seqListCreate() {
SeqList* list = (SeqList*)malloc(sizeof(SeqList));
list->head = NULL;
list->size = 0;
return list;
}
void insertAtHead(SeqList* list, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = list->head;
list->head = newNode;
list->size++;
}
void printList(SeqList* list) {
ListNode* temp = list->head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int deleteNodeAt(int index, SeqList* list) {
if (index >= list->size || index < 0) {
return -1; // 错误的索引
}
if (index == 0) { // 如果删除的是头部
ListNode* temp = list->head;
list->head = list->head->next;
free(temp);
list->size--;
return temp->data; // 返回删除的值
} else {
ListNode* prev = list->head;
for (int i = 1; i < index && prev != NULL; i++) {
prev = prev->next;
}
if (prev == NULL) return -1; // 没有找到节点
ListNode* nodeToDel = prev->next;
prev->next = nodeToDel->next;
free(nodeToDel);
list->size--;
return nodeToDel->data;
}
}
int listSize(SeqList* list) {
return list->size;
}
int main() {
SeqList* list = seqListCreate();
for (int i = 1; i <= 10; i++) {
insertAtHead(list, i);
}
// 在元素5之前插入100
insertAtHead(list, 100);
printf("顺序表元素个数: %d\n", listSize(list));
printList(list);
return 0;
}
```
在这个例子中,我们首先创建了一个空的顺序列表,接着添加了数字1到10,然后在元素5前面插入了100,并打印出列表的大小和所有元素。注意,由于列表中的元素是在内存中连续存储的,所以直接通过索引来访问和修改元素是比较直观的。
阅读全文