实现串的应用每一行是顺序结构,每一页包括若干行,每一行是一个节点,节点之间采用链式结构,页与页之间采用链式结构。可以实现字符串的插入,删除,查询等操作的代码
时间: 2024-02-24 12:55:21 浏览: 19
以下是实现串的应用的代码,其中每一行是顺序结构,每一页包括若干行,每一行是一个节点,节点之间采用链式结构,页与页之间采用链式结构。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PAGE_SIZE 10 // 每一页的最大行数
#define MAX_LINE_LENGTH 100 // 每行的最大长度
// 定义串的每个节点
typedef struct node {
char data[MAX_LINE_LENGTH]; // 节点存储的数据
struct node *next; // 指向下一个节点的指针
} Node;
// 定义串的每一页
typedef struct page {
Node *head; // 每一页的头节点
int size; // 当前页的行数
struct page *next; // 指向下一页的指针
} Page;
// 定义串
typedef struct {
Page *head; // 串的头部,指向第一页
int size; // 串的总行数
} String;
// 初始化一个节点
Node *init_node(char *data) {
Node *node = (Node *)malloc(sizeof(Node));
strcpy(node->data, data);
node->next = NULL;
return node;
}
// 插入一个节点
void insert_node(Node *prev, char *data) {
Node *node = init_node(data);
node->next = prev->next;
prev->next = node;
}
// 删除一个节点
void delete_node(Node *prev) {
Node *node = prev->next;
prev->next = node->next;
free(node);
}
// 初始化一页
Page *init_page() {
Page *page = (Page *)malloc(sizeof(Page));
page->head = init_node("");
page->size = 0;
page->next = NULL;
return page;
}
// 在指定页插入一行
void insert_line(Page *prev, char *data) {
if (prev->size >= MAX_PAGE_SIZE) {
Page *page = init_page();
page->next = prev->next;
prev->next = page;
insert_node(page->head, data);
page->size++;
} else {
insert_node(prev->head, data);
prev->size++;
}
}
// 删除指定页的一行
void delete_line(Page *prev) {
delete_node(prev->head);
prev->size--;
}
// 初始化串
String *init_string() {
String *string = (String *)malloc(sizeof(String));
string->head = init_page();
string->size = 0;
return string;
}
// 在指定位置插入一行
void insert_string(String *string, int pos, char *data) {
Page *prev_page = string->head;
int i, j;
for (i = 0; i < pos / MAX_PAGE_SIZE && prev_page->next != NULL; i++) {
prev_page = prev_page->next;
}
Node *prev_node = prev_page->head;
for (j = 0; j < pos % MAX_PAGE_SIZE && prev_node->next != NULL; j++) {
prev_node = prev_node->next;
}
insert_line(prev_page, data);
string->size++;
}
// 删除指定位置的一行
void delete_string(String *string, int pos) {
Page *prev_page = string->head;
int i, j;
for (i = 0; i < pos / MAX_PAGE_SIZE && prev_page->next != NULL; i++) {
prev_page = prev_page->next;
}
Node *prev_node = prev_page->head;
for (j = 0; j < pos % MAX_PAGE_SIZE && prev_node->next != NULL; j++) {
prev_node = prev_node->next;
}
delete_line(prev_page);
string->size--;
}
// 查询指定位置的一行
void get_string(String *string, int pos, char *data) {
Page *prev_page = string->head;
int i, j;
for (i = 0; i < pos / MAX_PAGE_SIZE && prev_page->next != NULL; i++) {
prev_page = prev_page->next;
}
Node *prev_node = prev_page->head;
for (j = 0; j < pos % MAX_PAGE_SIZE && prev_node->next != NULL; j++) {
prev_node = prev_node->next;
}
strcpy(data, prev_node->data);
}
int main() {
String *string = init_string();
int i;
char buf[MAX_LINE_LENGTH];
for (i = 0; i < 20; i++) {
sprintf(buf, "line %d", i);
insert_string(string, i, buf);
}
for (i = 0; i < 20; i++) {
get_string(string, i, buf);
printf("%s\n", buf);
}
delete_string(string, 5);
delete_string(string, 10);
delete_string(string, 15);
for (i = 0; i < 17; i++) {
get_string(string, i, buf);
printf("%s\n", buf);
}
return 0;
}
```
这段代码实现了串的插入、删除和查询操作,可以根据需要进行调用。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)