1、已知顺序存储线性表的插入、删操作代码,请构造一个线性表:(1)实现其倒 置操作,将结果输出显示;(2)删除其中的一个或多个元素,并将结果输出显示。 2、构建链式存储线性表,实现插入、打印、删除等功能。
时间: 2024-09-12 21:01:42 浏览: 64
<<构造顺序存储线性表和链式存储线性表的示例代码如下:
1. 顺序存储线性表的倒置操作和删除指定元素:
顺序存储线性表通常使用数组来实现。以下是用C语言实现顺序存储线性表倒置和删除元素的示例代码:
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义最大长度
// 顺序存储线性表结构定义
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int length; // 线性表当前长度
} SeqList;
// 初始化顺序存储线性表
void InitList(SeqList *L) {
L->length = 0;
}
// 线性表倒置操作
void ReverseList(SeqList *L) {
int temp;
for (int i = 0; i < L->length / 2; i++) {
temp = L->data[i];
L->data[i] = L->data[L->length - 1 - i];
L->data[L->length - 1 - i] = temp;
}
}
// 线性表删除指定位置元素
int DeleteEle(SeqList *L, int position) {
if (position < 1 || position > L->length) {
return 0; // 删除位置不合法
}
for (int i = position - 1; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1];
}
L->length--;
return 1;
}
// 打印线性表
void PrintList(SeqList *L) {
for (int i = 0; i < L->length; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
int main() {
SeqList L;
InitList(&L);
// 假设添加一些元素
for (int i = 1; i <= 5; i++) {
L.data[i-1] = i; // 在数组索引0位置开始存储
}
L.length = 5;
// 线性表倒置并打印
ReverseList(&L);
printf("倒置后的线性表: ");
PrintList(&L);
// 删除第3个元素并打印
if (DeleteEle(&L, 3)) {
printf("删除第三个元素后的线性表: ");
PrintList(&L);
} else {
printf("删除位置不合法\n");
}
return 0;
}
```
2. 链式存储线性表的插入、打印、删除:
链式存储线性表使用节点和指针来实现。以下是用C语言实现链式存储线性表插入、打印、删除等操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 链式存储线性表节点定义
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node, *LinkedList;
// 创建链表节点
Node* CreateNode(int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
if (newNode) {
newNode->data = data;
newNode->next = NULL;
}
return newNode;
}
// 链表尾插法插入元素
void Append(LinkedList L, int data) {
Node *newNode = CreateNode(data);
if (!L->next) {
L->next = newNode;
} else {
Node *current = L;
while (current->next) {
current = current->next;
}
current->next = newNode;
}
}
// 打印链表
void PrintLinkedList(LinkedList L) {
Node *current = L->next;
while (current) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 删除链表中值为data的节点
void DeleteEleLinkedList(LinkedList L, int data) {
Node *current = L;
Node *previous = NULL;
while (current && current->data != data) {
previous = current;
current = current->next;
}
if (current) {
if (previous) {
previous->next = current->next;
} else {
L->next = current->next;
}
free(current);
}
}
int main() {
LinkedList L = CreateNode(0); // 创建带头节点的链表
// 链表尾部插入一些元素
for (int i = 1; i <= 5; i++) {
Append(L, i);
}
// 打印链表
printf("原始链表: ");
PrintLinkedList(L);
// 删除值为3的节点并打印链表
DeleteEleLinkedList(L, 3);
printf("删除值为3的节点后的链表: ");
PrintLinkedList(L);
// 释放链表内存
Node *current = L;
while (current) {
Node *next = current->next;
free(current);
current = next;
}
return 0;
}
```
阅读全文