c语言新建一个顺序表,采用顺序存储的方式,将输入的数据存入顺序表,并将输入的元素输出,并完成以下基本操作: (1).删除指定位置的元素; (2).向指定位置插入元素; (3).查找某元素在线性表中的位置。
时间: 2024-10-09 20:02:04 浏览: 30
在C语言中创建一个顺序表(数组实现),你可以按照以下步骤进行:
首先,定义一个结构体作为数据元素,比如`typedef struct Node`:
```c
typedef struct {
int data; // 数据域
} Node;
```
然后定义顺序表类型,通常是一个指向首节点的指针:
```c
typedef struct List {
Node* head; // 指向第一个元素的指针
int size; // 当前元素的数量
} List;
```
接下来,初始化顺序表并添加元素:
```c
void createList(List* list) {
list->head = NULL;
list->size = 0;
}
// 添加元素到列表末尾
void addElement(List* list, int value) {
if (list->size == MAX_SIZE) { // 如果已满,处理溢出
printf("List is full.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node)); // 动态分配内存
newNode->data = value;
newNode->next = NULL;
if (list->head == NULL) { // 列表为空,设置头结点
list->head = newNode;
} else {
Node* current = list->head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
list->size++;
}
```
对于删除、插入和查找操作:
1. **删除指定位置的元素**:
```c
void deleteElement(List* list, int index) {
if (index < 0 || index >= list->size) {
printf("Invalid index.\n");
return;
}
if (index == 0) { // 删除头部元素
Node* temp = list->head;
list->head = list->head->next;
free(temp);
} else {
Node* current = list->head;
for (int i = 0; i < index - 1 && current != NULL; i++) {
current = current->next;
}
if (current == NULL) {
printf("Index out of range.\n");
return;
}
Node* temp = current->next;
current->next = current->next->next;
free(temp);
}
list->size--;
}
```
2. **向指定位置插入元素**:
```c
void insertElement(List* list, int value, int index) {
if (index < 0 || index > list->size) {
printf("Invalid index.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
if (index == 0) { // 插入到头部
newNode->next = list->head;
list->head = newNode;
} else {
Node* current = list->head;
for (int i = 0; i < index - 1; i++) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
list->size++;
}
```
3. **查找元素的位置**:
```c
int findElement(List* list, int value) {
Node* current = list->head;
for (int i = 0; i < list->size; i++, current = current->next) {
if (current->data == value) {
return i;
}
}
return -1; // 如果未找到,则返回-1表示不在列表中
}
```
记得在程序开始时设置适当的MAX_SIZE常量,以限制顺序表的最大容量。
阅读全文