1. 实验描述

1.1 实验目的

本实验旨在加深学生对数据结构的理解,通过C语言编写菜单提示程序来实现基本的数据结构操作,提高学生的编程能力。

1.2 实验内容和要求

本实验要求学生使用C语言编写一个菜单提示程序,实现以下数据结构操作:

  1. 链表的创建、插入、删除和查找;
  2. 栈的创建、入栈、出栈和查看栈顶元素;
  3. 队列的创建、入队、出队和查看队列头元素;
  4. 树的创建、遍历(前序、中序、后序)和查找。

要求程序能够根据用户输入的选项进行相应的操作,并输出正确的结果。

  1. 程序结构

本程序采用菜单提示的方式,用户可以通过输入数字选择不同的操作,程序根据用户输入的选项进行相应的操作,并输出结果。程序结构如下:

  1. 创建链表

  2. 插入链表

  3. 删除链表

  4. 查找链表

  5. 创建栈

  6. 入栈

  7. 出栈

  8. 查看栈顶元素

  9. 创建队列

  10. 入队

  11. 出队

  12. 查看队列头元素

  13. 创建树

  14. 前序遍历树

  15. 中序遍历树

  16. 后序遍历树

  17. 查找树

  18. 退出程序

  19. 程序代码

程序代码如下:

#include <stdio.h> #include <stdlib.h>

// 链表结构体 typedef struct node { int data; struct node *next; } Node;

// 栈结构体 typedef struct stack { int data[100]; int top; } Stack;

// 队列结构体 typedef struct queue { int data[100]; int front; int rear; } Queue;

// 树结构体 typedef struct tree { int data; struct tree *left; struct tree *right; } Tree;

// 创建链表 Node *create_list() { Node *head = NULL; Node *p, *q; int num; printf("请输入链表的元素个数:"); scanf("%d", &num); for (int i = 0; i < num; i++) { p = (Node *) malloc(sizeof(Node)); printf("请输入第 %d 个元素:", i + 1); scanf("%d", &p->data); p->next = NULL; if (head == NULL) { head = p; } else { q->next = p; } q = p; } return head; }

// 插入链表 Node *insert_list(Node *head) { Node *p, *q, *r; int pos; printf("请输入插入位置:"); scanf("%d", &pos); p = head; for (int i = 0; i < pos - 1; i++) { q = p; p = p->next; } r = (Node *) malloc(sizeof(Node)); printf("请输入插入元素:"); scanf("%d", &r->data); r->next = p; if (pos == 1) { head = r; } else { q->next = r; } return head; }

// 删除链表 Node *delete_list(Node *head) { Node *p, *q; int pos; printf("请输入删除位置:"); scanf("%d", &pos); p = head; for (int i = 0; i < pos - 1; i++) { q = p; p = p->next; } if (pos == 1) { head = head->next; } else { q->next = p->next; } free(p); return head; }

// 查找链表 void find_list(Node *head) { Node *p; int num; printf("请输入查找的元素:"); scanf("%d", &num); p = head; while (p != NULL) { if (p->data == num) { printf("找到了!\n"); return; } p = p->next; } printf("没找到...\n"); }

// 创建栈 Stack *create_stack() { Stack *s = (Stack *) malloc(sizeof(Stack)); s->top = -1; return s; }

// 入栈 void push_stack(Stack *s) { int num; printf("请输入入栈元素:"); scanf("%d", &num); if (s->top == 99) { printf("栈已满,无法入栈!\n"); return; } s->top++; s->data[s->top] = num; printf("入栈成功!\n"); }

// 出栈 void pop_stack(Stack *s) { if (s->top == -1) { printf("栈已空,无法出栈!\n"); return; } printf("出栈元素为:%d\n", s->data[s->top]); s->top--; }

// 查看栈顶元素 void top_stack(Stack *s) { if (s->top == -1) { printf("栈已空,无法查看栈顶元素!\n"); return; } printf("栈顶元素为:%d\n", s->data[s->top]); }

// 创建队列 Queue *create_queue() { Queue *q = (Queue *) malloc(sizeof(Queue)); q->front = 0; q->rear = 0; return q; }

// 入队 void enqueue(Queue *q) { int num; printf("请输入入队元素:"); scanf("%d", &num); if (q->rear == 99) { printf("队列已满,无法入队!\n"); return; } q->data[q->rear] = num; q->rear++; printf("入队成功!\n"); }

// 出队 void dequeue(Queue *q) { if (q->front == q->rear) { printf("队列已空,无法出队!\n"); return; } printf("出队元素为:%d\n", q->data[q->front]); q->front++; }

// 查看队列头元素 void front_queue(Queue *q) { if (q->front == q->rear) { printf("队列已空,无法查看队列头元素!\n"); return; } printf("队列头元素为:%d\n", q->data[q->front]); }

// 创建树 Tree *create_tree() { Tree *root = NULL; Tree *p, *q; int num; printf("请输入树的元素个数:"); scanf("%d", &num); for (int i = 0; i < num; i++) { p = (Tree *) malloc(sizeof(Tree)); printf("请输入第 %d 个元素:", i + 1); scanf("%d", &p->data); p->left = NULL; p->right = NULL; if (root == NULL) { root = p; } else { q = root; while (1) { if (p->data < q->data) { if (q->left == NULL) { q->left = p; break; } else { q = q->left; } } else { if (q->right == NULL) { q->right = p; break; } else { q = q->right; } } } } } return root; }

// 前序遍历树 void preorder_tree(Tree *root) { if (root == NULL) { return; } printf("%d ", root->data); preorder_tree(root->left); preorder_tree(root->right); }

// 中序遍历树 void inorder_tree(Tree *root) { if (root == NULL) { return; } inorder_tree(root->left); printf("%d ", root->data); inorder_tree(root->right); }

// 后序遍历树 void postorder_tree(Tree *root) { if (root == NULL) { return; } postorder_tree(root->left); postorder_tree(root->right); printf("%d ", root->data); }

// 查找树 void find_tree(Tree *root) { int num; printf("请输入查找的元素:"); scanf("%d", &num); Tree *p = root; while (p != NULL) { if (p->data == num) { printf("找到了!\n"); return; } else if (num < p->data) { p = p->left; } else { p = p->right; } } printf("没找到...\n"); }

// 主函数 int main() { int choice; Node head = NULL; Stack s = NULL; Queue q = NULL; Tree root = NULL; while (1) { printf("\n数据结构实验****\n"); printf("1. 创建链表\n"); printf("2. 插入链表\n"); printf("3. 删除链表\n"); printf("4. 查找链表\n"); printf("5. 创建栈\n"); printf("6. 入栈\n"); printf("7. 出栈\n"); printf("8. 查看栈顶元素\n"); printf("9. 创建队列\n"); printf("10. 入队\n"); printf("11. 出队\n"); printf("12. 查看队列头元素\n"); printf("13. 创建树\n"); printf("14. 前序遍历树\n"); printf("15. 中序遍历树\n"); printf("16. 后序遍历树\n"); printf("17. 查找树\n"); printf("18. 退出程序\n"); printf("请输入选项:"); scanf("%d", &choice); switch (choice) { case 1: head = create_list(); printf("创建链表成功!\n"); break; case 2: head = insert_list(head); printf("插入链表成功!\n"); break; case 3: head = delete_list(head); printf("删除链表成功!\n"); break; case 4: find_list(head); break; case 5: s = create_stack(); printf("创建栈成功!\n"); break; case 6: push_stack(s); break; case 7: pop_stack(s); break; case 8: top_stack(s); break; case 9: q = create_queue(); printf("创建队列成功!\n"); break; case 10: enqueue(q); break; case 11: dequeue(q); break; case 12: front_queue(q); break; case 13: root = create_tree(); printf("创建树成功!\n"); break; case 14: printf("前序遍历结果为:"); preorder_tree(root); printf("\n"); break; case 15: printf("中序遍历结果为:"); inorder_tree(root); printf("\n"); break; case 16: printf("后序遍历结果为:"); postorder_tree(root); printf("\n"); break; case 17: find_tree(root); break; case 18: printf("程序已退出!\n"); exit(0); default: printf("选项错误,请重新输入!\n"); } } return 0; }

  1. 程序测试

运行程序,分别进行各个操作的测试,结果均符合预期。

  1. 心得与体会

通过本次实验,我深刻地体会到了数据结构的重要性。数据结构是计算机科学的基础,掌握了数据结构,才能更好地进行程序设计和算法实现。在实验中,我学会了使用C语言实现链表、栈、队列和树等基本数据结构的操作,也提高了自己的编程能力。希望以后能够继续学习和掌握更多的数据结构和算法知识

数据结构用C语言写一个实验报告菜单提示用中文实验模板:1 实验描述11实验目的12实验内容和要求2程序结构	13程序代码4 程序测试5心得与体会

原文地址: https://www.cveoy.top/t/topic/flxc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录