数据结构 —— 第一个程序 【顺序表】
来源:互联网 发布:java random.nextint 编辑:程序博客网 时间:2024/05/28 09:31
顺序表的初始化、查询、扩容、插入、清空、删除、合并。
//操作的开始***********************************//操作的进行//操作的结束***********************************#include <cstdio>#include <cstring>#include <algorithm>#define MAX 1000#define MAXM 10#define OK 1#define OVERFLOW -1#define ERROR -2#define ListAdd 10//顺序表扩容#define ListInitsize 20//顺序表初始化尺寸using namespace std;typedef int Status;typedef int ElemType;typedef struct{ ElemType *elem; ElemType length; ElemType listsize;}SqList;SqList La, Lb, Lc;void Sort(SqList &L)//冒泡排序{ for(int i = 0; i < L.length; i++) for(int j = 0; j < i; j++) if(L.elem[i] < L.elem[j]) { int t = L.elem[i]; L.elem[i] = L.elem[j]; L.elem[j] = t; }}void Listinput(SqList &L){ printf("*******************************************************************************\n"); L.elem = (ElemType *)malloc(ListInitsize * sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = ListInitsize; printf("\t\t\t\t输入元素个数\n"); printf("\t\t\t\t"); int n; scanf("%d", &n); printf("\t\t\t\t输入元素\n"); printf("\t\t\t\t"); for(int i = 0; i < n; i++) scanf("%d", &L.elem[i]); L.length = n; Sort(L); printf("*******************************************************************************\n");}void ListClear(SqList &L){ printf("*******************************************************************************\n"); L.length = 0; printf("*******************************************************************************\n");}void ListQuery(SqList &L){ printf("*******************************************************************************\n"); printf("\t\t\t\t输入要查询元素的位置\n"); printf("\t\t\t\t"); int op; scanf("%d", &op); if(op < 1 || op > L.length)//判断位置是否合法 { printf("\t\t\t\t查询位置不合法\n"); printf("*******************************************************************************\n"); } else { printf("\t\t\t\t%d\n", L.elem[op-1]); printf("*******************************************************************************\n"); }}void ListDelete(SqList &L){ printf("*******************************************************************************\n"); printf("\t\t\t\t输入要删除元素的位置\n"); printf("\t\t\t\t"); int op; scanf("%d", &op); if(op < 1 || op > L.length)//判断位置是否合法 { printf("\t\t\t\t删除位置不合法\n"); printf("*******************************************************************************\n"); } int *p, *q; q = &(L.elem[L.length-1]); p = &(L.elem[op-1]); int x = *p;//存储删除的元素 for(; p <= q; p++) *p = *(p+1); --L.length; printf("*******************************************************************************\n");}void ListInsert(SqList &L){ printf("*******************************************************************************\n"); printf("\t\t\t\t输入要插入元素的位置\n"); printf("\t\t\t\t"); int op; scanf("%d", &op); if(op < 1 || op > L.length+1)//判断位置是否合法 { printf("\t\t\t\t插入位置不合法\n"); printf("*******************************************************************************\n"); } //扩容操作 int *newbase; if (L.length >= L.listsize) { newbase = (ElemType *)realloc(L.elem, (L.listsize+ListAdd)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); // 存储分配失败 L.elem = newbase; // 新基址 L.listsize += ListAdd; // 增加存储容量 } printf("\t\t\t\t输入要插入的元素\n"); printf("\t\t\t\t"); int x; scanf("%d", &x); int *p, *q; q = &(L.elem[op-1]); for(p = &(L.elem[L.length-1]); p >= q; p--) *(p+1) = *p; *q = x; ++L.length; printf("*******************************************************************************\n");}void ListMerge(SqList &La, SqList &Lb, SqList &Lc){ printf("*******************************************************************************\n"); printf("\t\t\t\t要合并的顺序表\n"); printf("\t\t\t\t顺序表a和顺序表b合并成顺序表c\n"); int *pa, *pb, *pc; pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length+Lb.length; //Lc的长度赋值 pc = Lc.elem = (ElemType *)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem) exit(OVERFLOW); //分配空间 int *pa_last = La.elem + La.length - 1; //记录La最后元素存放地址 int *pb_last = Lb.elem + Lb.length - 1; //记录Lb最后元素存放地址 while(pa <= pa_last && pb <= pb_last) { if(*pa <= *pb) *pc++ = *pa++; else *pc++ = *pb++; } while(pa <= pa_last) *pc++ = *pa++; while(pb <= pb_last) *pc++ = *pb++; printf("*******************************************************************************\n");}void ListPrintf(SqList &L){ printf("*******************************************************************************\n"); printf("\t\t\t\t元素如下:\n"); if(L.length == 0) { printf("\t\t\t\t顺序表为空\n"); printf("*******************************************************************************\n"); } int *p, *q; p = &(L.elem[0]); q = &(L.elem[L.length-1]); printf("\t\t\t\t"); for(; p <= q; p++) printf("%d ", *p); printf("\n"); printf("*******************************************************************************\n");}void Read_How_To_Use(){printf("****************************使用前请您阅读——使用指南**************************\n");printf("***********************函数Listinput() —— 输入顺序表元素**********************\n");printf("***********************函数ListQuery() —— 查询顺序表元素**********************\n");printf("***********************函数ListDelete() —— 删除顺序表元素*********************\n");printf("***********************函数ListInsert() —— 插入顺序表元素*********************\n");printf("***********************函数ListClear() —— 清空顺序表元素**********************\n");printf("***********************函数ListPrintf() —— 输出顺序表元素*********************\n");printf("***********************函数ListMerge() —— 合并两个顺序表**********************\n");printf("*********************************返回上一步请输入0****************************\n");}void Chooseoperator(int kind, int op){ int C; switch(op) { case 1: printf("\n\n\n"); printf("\t\t\t\t请选择操作:\n"); printf("\t\t\t\t1: 使用说明\n"); printf("\t\t\t\t2: 开始使用\n"); printf("\t\t\t\t3: 退出系统\n"); printf("\t\t\t\t您的选择:"); scanf("%d", &C); while(C < 1 || C > 3) { printf("\t\t\t\t输入不合法,请重新输入\n"); printf("\t\t\t\t"); scanf("%d", &C); } switch(C) { case 1: system("cls"); Read_How_To_Use(); printf("\t\t\t\t您的选择:"); scanf("%d", &C); while(C != 0) { printf("\t\t\t\t"); printf("输入不合法,请重新输入\n"); printf("\t\t\t\t您的选择:"); scanf("%d", &C); }Chooseoperator(1, 1); break; case 2: system("cls"); Chooseoperator(1, 2); break; case 3: printf("\t\t\t\t谢谢使用!\n"); exit(0); } break; case 2: printf("\n\n\n"); printf("\t\t\t\t对链表进行操作,请选择:\n"); printf("\t\t\t\t1: 顺序表a\n"); printf("\t\t\t\t2: 顺序表b\n"); printf("\t\t\t\t3: 顺序表c\n"); printf("\t\t\t\t4: 把顺序表a和顺序表b合并成顺序表c\n"); printf("\t\t\t\t5: 回退上一步\n"); printf("\t\t\t\t您的选择:"); scanf("%d", &C); while(C < 1 || C > 5) { printf("\t\t\t\t输入不合法,请重新输入\n"); printf("\t\t\t\t您的选择:"); scanf("%d", &C); } if(C == 5) { Chooseoperator(1, 1); break; } system("cls"); Chooseoperator(C, 3); break; case 3: printf("\n\n\n"); printf("\t\t\t\t选择操作:\n"); printf("\t\t\t\t1: 输入元素\n"); printf("\t\t\t\t2: 查询元素\n"); printf("\t\t\t\t3: 删除元素\n"); printf("\t\t\t\t4: 插入元素\n"); printf("\t\t\t\t5: 清空顺序表\n"); printf("\t\t\t\t6: 输出顺序表\n"); printf("\t\t\t\t7: 合并顺序表\n"); printf("\t\t\t\t8: 回退上一步\n"); printf("\t\t\t\t您的选择:"); scanf("%d", &C); while(C < 1 || C > 8) { printf("\t\t\t\t输入不合法,请重新输入\n"); printf("\t\t\t\t您的选择:"); scanf("%d", &C); } switch(C) { case 1: system("cls"); switch(kind) { case 1: Listinput(La); break; case 2: Listinput(Lb); break; case 3: Listinput(Lc); } Chooseoperator(kind, 3); break; case 2: system("cls"); switch(kind) { case 1: ListQuery(La); break; case 2: ListQuery(Lb); break; case 3: ListQuery(Lc); } Chooseoperator(kind, 3); break; case 3: system("cls"); switch(kind) { case 1: ListDelete(La); break; case 2: ListDelete(Lb); break; case 3: ListDelete(Lc); } Chooseoperator(kind, 3); break; case 4: system("cls"); switch(kind) { case 1: ListInsert(La); break; case 2: ListInsert(Lb); break; case 3: ListInsert(Lc); } Chooseoperator(kind, 3); break; case 5: system("cls"); switch(kind) { case 1: ListClear(La); break; case 2: ListClear(Lb); break; case 3: ListClear(Lc); } Chooseoperator(kind, 3); break; case 6: system("cls"); switch(kind) { case 1: ListPrintf(La); break; case 2: ListPrintf(Lb); break; case 3: ListPrintf(Lc); } Chooseoperator(kind, 3); break; case 7: system("cls"); ListMerge(La, Lb, Lc); Chooseoperator(1, 2); break; case 8: system("cls"); Chooseoperator(1, 2); } }}int main(){ printf("*******************************您好,欢迎使用本系统*****************************\n\n"); Chooseoperator(1, 1);return 0;}
0 0
- 数据结构 —— 第一个程序 【顺序表】
- 第一个 数据结构程序 链表插入,打印
- 数据结构—顺序表
- [C#]第一个程序——HelloWorld
- 入门——第一个android程序
- DX11——第一个程序:Box
- Android第一个程序——打招呼
- QT——第一个QT程序
- yii——第一个程序
- 第一个Hadoop程序——WordCount
- 第一个MapReduce程序——WordCount
- 第一个Android程序——计算器
- React ——第一个程序
- 第一个Java程序——HolloWorld
- 002——第一个Spring程序
- C语言—第一个程序
- ARToolKit安装指南—第一个程序
- 第一个Visual C++程序—HelloWorld
- 几种中文分词工具
- BaseAdapter
- hdu1150Machine Schedule(好题)
- C#中WinForm窗体事件的执行次序如下:
- vbs/QTP进程/任务栏操作
- 数据结构 —— 第一个程序 【顺序表】
- UI_UIScrollView(滚动视图)的图文理解
- MySQL语句内求和 选择语句外的表进行查询求和
- SpringMVC注解之@ModelAttribute
- 从零开始搭建高可用IM系统
- Python 反转字典 即key和val互换
- 参考上一篇的资料写的去重程序
- 关于参加OpenBLAS介绍会的一些心得
- Java 动态代理机制分析及扩展,第 1 部分