顺序表的实现
2016-05-12 23:30
344 查看
顺序表:逻辑上连续,物理结构上也连续
实现一个具有“增、删(根据位置删除,根据元素删除)、查、初始化、输入、打印”等简单功能的顺序表:
源码:
实现一个具有“增、删(根据位置删除,根据元素删除)、查、初始化、输入、打印”等简单功能的顺序表:
源码:
头文件部分("sequence.h"): #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int last; }SeqList; void creat(SeqList *L); //创建顺序表 int InsertSList(SeqList *L, int i, int x); //在i位置插入x int DeleteList(SeqList *L, int i); //删除i位置的元素 int GetData(SeqList *L, int x); //查找值为x的下标 int GetLength(SeqList *L); //求顺便长度 int InitSList(SeqList *L); //初始化顺序表,释放整个顺表 void output(SeqList * L); //打印整个顺序表 void reverse_list(SeqList *L); //反转整个顺序表 void sortrank(SeqList *L); //对顺序表进行排序 //封装函数部分("sequence.c"): #include"sequence.h" void creat(SeqList *L) //创建一个顺序表 { printf("请输入顺序表:\n"); for (int n = 0; n <= L->last; n++) { scanf("%d", &(L->data )); } printf("输入成功\n"); } int InsertSList(SeqList *L, int i, int x) //将x插入到i位置上,成功返回1 { if ((i<1) || i>(L->last + 2)) return -1; if ((L->last) == (MAXSIZE - 1)) return -1; for (int n = L->last; n >= i - 1; n--) L->data[n + 1] = L->data ; L->data[i - 1] = x; L->last++; return 1; } int DeleteList(SeqList *L, int i) //删除i位置上的元素,成功返回1 { if ((i > L->last + 1) || (i < 1)) return -1; if (L->last == -1) return -1; for (int n = i - 1; n <L->last; n++) { L->data = L->data[n + 1]; } L->last--; return 1; } int GetData(SeqList *L, int x) //查找x元素的所在的位置 { int i = 0; if (L->last<0) return -1; while (i <= L->last) { if (L->data[i] == x) return i + 1; i++; } return -1; } int GetLength(SeqList *L) //求取表的长度 { return (L->last + 1); } int InitSList(SeqList *L) //初始化顺序表,将当前顺序表释放 { L->last = -1; return 1; } void output(SeqList * L) //打印顺序表 { if (L->last==-1) { printf("请先创建顺序表\n"); } else { for (int n = 0; n <= L->last; n++) printf("%d ", L->data ); printf("\n"); } } void reverse_list(SeqList *L) { if (L->last == -1) printf("请先创建顺序表\n"); else { ElemType *left = L->data; ElemType *right = left + L->last; while (left<right) { ElemType tmp = *left; *left = *right; *right = tmp; left++; right--; } printf("逆序成功\n"); } } void sortrank(SeqList *L) //对顺序表进行排序 { ElemType tmp; int i = 0; int j = 0; for (i = 0; i <= L->last; i++) { for (j = 0; j <(L->last - i); j++) { if (L->data[j]>L->data[j + 1]) { tmp = L->data[j]; L->data[j] = L->data[j + 1]; L->data[j + 1] = tmp; } } } printf("排序成功\n"); } 主函数部分: #include"sequence.h" int main() { int m = 0; int n = 0; int i = 0; int ret=0; ElemType x; SeqList L; L.last = -1; printf("***********************************************\n"); printf("***********************************************\n"); printf("********0.exit 1.Creat*************\n"); printf("********2.InsertSList 3.ListDelete********\n"); printf("********4.FindData 5.GetLength*********\n"); printf("********6.InitSList 7.output************\n"); printf("********8.ReverseList 9.Sortrank**********\n\n\n"); while (1) { printf("请选择功能: "); scanf("%d", &n); switch (n) { case 0: exit(1); break; case 1: while (1) { printf("请输入顺序表长度:"); scanf("%d", &L.last); if (L.last < 1) printf("输入无效,请重新输入\n"); else break; } L.last = L.last - 1; creat(&L); break; case 2: printf("请输入要插入的位置: 和要插入的元素:\n"); scanf("%d%d", &i, &x); ret = InsertSList(&L, i, x); if (ret == 1) printf("插入成功\n"); else printf("插入失败\n"); break; case 3: printf("****1、位置删除 2、元素删除****\n"); printf("请选择删除方式:"); while (1) { scanf("%d", &m); if (m==1||m==2) break; else printf("选择无效,请重新选择\n"); } switch (m) //开始执行删除的方式 { case 1: { printf("请输入要删除的位置:"); scanf("%d", &i); ret = DeleteList(&L,i); break; } case 2: { int i = 0; printf("输入要删除的元素:"); scanf("%d", &x); while (1) { i = GetData(&L, x); if (i ==-1) break; ret =DeleteList(&L, i); } break; } //删除结束 } if (ret == 1) printf("删除成功\n"); else printf("删除失败\n"); break; case 4: printf("请输入要查找的元素:"); scanf("%d",&x); ret=GetData(&L,x); if (ret==-1) printf("查询无果\n"); else printf("查找成功:%d\n",ret); break; case 5: ret=GetLength(&L); printf("顺序表长度:%d\n", ret); break; case 6: InitSList(&L); printf("初始化成功\n"); break; case 7: printf("打印顺序表:"); output(&L); break; case 8: reverse_list(&L); break; case 9: sortrank(&L); break; default: printf("选择无效,请重新选择\n"); break; } ret = 0; } system("pause"); return 0; }
相关文章推荐
- JS中event对象的21个常见属性
- SQL查询之分组
- linux 源码包安装LNMP(linux+nginx+mysql+php)服务器环境
- 实验八:SQLite数据库操作
- 单链表实现
- UnityShader2 CG Pipeline
- 前端简单SEO
- ROS_Kinetic_05 ROS基础内容(二)
- ROS_Kinetic_05 ROS基础内容(二)
- ROS_Kinetic_05 ROS基础内容(二)
- Codeforces Round #352 (Div. 1) B. Robin Hood
- 笔试面试题7--求因数个数
- 求逆序对
- 不使用中间变量交换两个数. 求平均数考虑溢出
- poj2758 checking the text
- “说反话”实现字符串反转
- 【程序人生】:一篇关于编程思想的体会
- 8、Hibernate框架(ORM详解、主文件配置、映射文件配置)
- 学生成绩统计(C案例)
- 浮点数的存储形式