1. 设计程序建立一个顺序表,要求从键盘输入整数,并完成添加插入和删除元素功能,并将该顺序表的元素从屏幕显示出来。 2. 设计程序创建一个单向链表,并输出链表中数据。要求:从键盘输入元素的值,并在此基础上实现元素插入、删除及按值查找的功能。
时间: 2024-02-15 16:02:16 浏览: 80
1. 以下是一个简单的顺序表程序,可以实现添加、插入和删除元素的功能,并将顺序表元素输出到屏幕上。注意,这里的代码仅供参考,可能需要根据具体的需求进行修改。
```
#include <stdio.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 顺序表存储的数据
int length; // 顺序表的长度
} SqList;
// 初始化顺序表
void init(SqList *list) {
list->length = 0;
}
// 插入元素,pos 表示插入的位置,x 表示要插入的元素
int insert(SqList *list, int pos, int x) {
if (list->length == MAXSIZE) {
printf("顺序表已满,无法插入!\n");
return 0;
}
if (pos < 1 || pos > list->length + 1) {
printf("插入位置不合法!\n");
return 0;
}
for (int i = list->length; i >= pos; i--) {
list->data[i] = list->data[i-1];
}
list->data[pos-1] = x;
list->length++;
return 1;
}
// 删除元素,pos 表示要删除的位置
int delete(SqList *list, int pos) {
if (pos < 1 || pos > list->length) {
printf("删除位置不合法!\n");
return 0;
}
for (int i = pos; i < list->length; i++) {
list->data[i-1] = list->data[i];
}
list->length--;
return 1;
}
// 输出顺序表的元素
void display(SqList list) {
printf("顺序表的元素为:");
for (int i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
}
int main() {
SqList list;
init(&list); // 初始化顺序表
// 从键盘输入元素,直到输入 -1 结束
int x;
printf("请输入顺序表的元素(以-1结束):");
while (scanf("%d", &x) != EOF && x != -1) {
insert(&list, list.length+1, x); // 将元素插入到顺序表的末尾
}
display(list); // 输出顺序表的元素
// 从键盘输入要插入的位置和元素
int pos, y;
printf("请输入要插入的位置和元素:");
scanf("%d%d", &pos, &y);
insert(&list, pos, y);
display(list); // 输出顺序表的元素
// 从键盘输入要删除的位置
int del_pos;
printf("请输入要删除的位置:");
scanf("%d", &del_pos);
delete(&list, del_pos);
display(list); // 输出顺序表的元素
return 0;
}
```
2. 以下是一个简单的单向链表程序,可以实现添加、插入、删除和按值查找元素的功能,并将链表元素输出到屏幕上。注意,这里的代码仅供参考,可能需要根据具体的需求进行修改。
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data; // 链表存储的数据
struct node *next; // 指向下一个节点的指针
} Node;
// 创建链表
Node* create() {
Node *head, *p, *q;
head = (Node*) malloc(sizeof(Node)); // 创建头节点
head->next = NULL; // 头节点的指针域置为 NULL
q = head; // q 指向链表的最后一个节点
printf("请输入链表的元素(以-1结束):");
while (1) {
int x;
scanf("%d", &x);
if (x == -1) break;
p = (Node*) malloc(sizeof(Node)); // 创建新节点
p->data = x; // 将数据存储到新节点中
q->next = p; // 将新节点插入到链表中
q = p; // q 指向链表的最后一个节点
}
return head;
}
// 插入元素,pos 表示插入的位置,x 表示要插入的元素
int insert(Node *head, int pos, int x) {
Node *p, *q;
p = head->next;
for (int i = 1; i < pos-1 && p != NULL; i++) {
p = p->next;
}
if (p == NULL && pos != 1) {
printf("插入位置不合法!\n");
return 0;
}
q = (Node*) malloc(sizeof(Node)); // 创建新节点
q->data = x; // 将数据存储到新节点中
if (pos == 1) { // 在链表头插入新节点
q->next = head->next;
head->next = q;
} else { // 在链表中间或尾部插入新节点
q->next = p->next;
p->next = q;
}
return 1;
}
// 删除元素,pos 表示要删除的位置
int delete(Node *head, int pos) {
Node *p, *q;
p = head->next;
for (int i = 1; i < pos-1 && p != NULL; i++) {
p = p->next;
}
if (p == NULL || p->next == NULL) {
printf("删除位置不合法!\n");
return 0;
}
q = p->next;
p->next = q->next;
free(q); // 释放被删除的节点
return 1;
}
// 按值查找元素,x 表示要查找的值
int search(Node *head, int x) {
Node *p = head->next;
int pos = 1;
while (p != NULL && p->data != x) {
p = p->next;
pos++;
}
if (p == NULL) {
printf("没有找到元素 %d!\n", x);
return 0;
} else {
printf("元素 %d 的位置是 %d。\n", x, pos);
return pos;
}
}
// 输出链表的元素
void display(Node *head) {
Node *p = head->next;
printf("链表的元素为:");
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = create(); // 创建链表
display(head); // 输出链表的元素
// 从键盘输入要插入的位置和元素
int pos, y;
printf("请输入要插入的位置和元素:");
scanf("%d%d", &pos, &y);
insert(head, pos, y);
display(head); // 输出链表的元素
// 从键盘输入要删除的位置
int del_pos;
printf("请输入要删除的位置:");
scanf("%d", &del_pos);
delete(head, del_pos);
display(head); // 输出链表的元素
// 从键盘输入要查找的元素
int x;
printf("请输入要查找的元素:");
scanf("%d", &x);
search(head, x);
return 0;
}
```
阅读全文