/* COPYRIGHT (C) 2013 BY MULDINI. ALL RIGHTS RESERVED. VERSION: 1.0 AUTHOR: Paolo Weng DATE: 2013-09-01 DESCRIPTION: 一个菜单,根据用户的选择实现对线性表的求表长、取表元、插入和退出等操作。 */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windef.h> #define ListSize 10 //假定表容量为10 typedef int DataType; //假定DataType的类型为int型 typedef struct { DataType data[ListSize]; //向量data用于存放表结点 int length; //当前表的长度(结点数) } SeqList; //返回顺序表L的表长 int getLength(SeqList *listPointer) { return listPointer->length; } //返回顺序表L的第i个结点的值 DataType getElementBySeqNo(SeqList *listPointer, int i) { return listPointer->data[i - 1]; } //将t插入顺序表的第i个结点的位置上 int insertElement(SeqList *listPointer, DataType t, int i) { if (i < 1 || i > listPointer->length + 1) { puts("插入位置错"); return FALSE; } if (listPointer->length >= ListSize) { puts("表满不能插入"); return FALSE; } for (int j = listPointer->length - 1; j >= i - 1; j--) listPointer->data[j + 1] = listPointer->data[j]; //结点依次后移 listPointer->data[i - 1] = t; //插入t listPointer->length++; //表长加1 return TRUE; } //显示顺序表 void show(SeqList *listPointer) { for (int j = 0; j < getLength(listPointer); j++) printf("%5d", listPointer->data[j]); printf("\n"); } //从顺序表中查找值为t的结点,找到返回位置值i,否则返回-1 int getSeqNoByValue(SeqList *listPointer, DataType t) { int i = 1; while (i <= listPointer->length && listPointer->data[i - 1] != t) i++; if (listPointer->data[i - 1] == t) return i; else return -1; } //菜单显示 void showMenu() { printf("\n\t\t\t 线性表的操作\n"); printf("\n\t\t1.求表长\t\t2.取表元"); printf("\n\t\t3.插入\t\t\t4.退出系统"); printf("\n\n"); } //根据用户选择,决定所做的操作 void executeMenuOption(SeqList *listPointer, char ch) { int i, x; switch (ch) { case '1': printf("表长为:%d\n", getLength(listPointer)); break; case '2': printf("请输入取第几个元素:"); scanf("%d", &i); if (i < 1 || i > listPointer->length) puts("输入错!"); else printf("第%d个元素为%d\n", i, getElementBySeqNo(listPointer, i)); break; case '3': printf("请输入要插入元素的位置和数值:"); scanf("%d%d", &i, &x); printf("原线性表:\n"); show(listPointer); if (insertElement(listPointer, x, i)) { printf("插入后的线性表:\n"); show(listPointer); } else printf("插入失败。\n"); break; case '4': printf("欢迎再次使用,再见!\n"); exit(EXIT_SUCCESS); } } int main() { SeqList aList = {{12, 35, 25, 17, 49, 8, 20}, 7}; while (TRUE) { system("cls"); // 清空屏幕 showMenu(); printf("请根据菜单选择所需的操作:"); char ch = getchar(); // _flushall(); // 清空缓存 executeMenuOption(&aList, ch); // 执行对应的菜单选项 printf("按任意键继续!"); getch(); _flushall(); // 清空缓存 } return EXIT_SUCCESS; }
erutdioup8556
相关分类