顺序表】相关应用与基础操作函数【SDUT_2017_暑假
来源:互联网 发布:淘宝优惠券和满减顺序 编辑:程序博客网 时间:2024/06/07 21:55
**顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。--摘自百度百科**
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <algorithm>#include <string.h>#define LISTINCREASMENT 1000 //每次再分配元素的个数#define LISTSIZE 100000 //顺序存储的最大个数#define OVERFLOW -1#define OK 1using namespace std;int SeqInitial(Seqlist &L) //初始化线性表int ListInsert(Seqlist &L, int i, int e) //向位置i插入元素evoid ListDelete(Seqlist &L, int i, int &e) //删除线性表中第i个位置上的元素int LocateELem(Seqlist &L, int e) //定位元素e在顺序表中的位置int GetElem(Seqlist &L, int i) //返回第i个位置上的元素值typedef struct //顺序表元素定义{ int *elem; //元素数据 int length; //顺序表现在的长度 int listsize; //顺序表开辟的长度}Seqlist;int SeqInitial(Seqlist &L) //初始化线性表{ L.elem = (int *) malloc (sizeof(int) * LISTSIZE); //为新数据开辟空间 if(!L.elem) exit(OVERFLOW); //如果分配失败返回OVERFLOW L.length = 0; //顺序表长度初始化0 L.listsize = LISTSIZE; //顺序表总长度初始化 return OK;}int ListInsert(Seqlist &L, int i, int e) //向位置i插入元素e{ if(i < 1 || i > L.length + 1) printf("ERROR!"); //如果插入位置不合法 if(L.length >= L.listsize) { int *newbase = (int *) realloc (L.elem, (L.listsize + LISTINCREASMENT) * sizeof(int)); if(!newbase) return OVERFLOW; //当前存储空间已满 L.elem = newbase; L.listsize += LISTINCREASMENT; //表的容量不足以分配内存 } int *q = &(L.elem[i - 1]); //找到前驱结点 int *p; for(p = &(L.elem[L.length - 1]); p >= q; --p) //依次往后移 *(p + 1) = *p; *q = e; //插入新数据 ++L.length; //长度++ return OK;}void ListDelete(Seqlist &L, int i, int &e) //删除线性表中第i个位置上的元素{ if(i < 1 || i > L.length) printf("ERROR!"); //如果删除位置不合法 else { e = L.elem[i - 1]; //能保存一下被删掉的值 for(; i < L.length; i++) //从被删的数的位置开始依次后面的开始抵消前面的 { L.elem[i - 1] = L.elem[i]; } L.length--; //总长度-- }}int LocateELem(Seqlist &L, int e) //定位元素e在顺序表中的位置{ int i; for(i = 0; i <= L.length - 1; i++) { if(L.elem[i] >= e) { break; } } return i + 1;}int GetElem(Seqlist &L, int i) //返回第i个位置上的元素值{ if(i < 1 || i > L.length) printf("ERROR!"); //如果位置不合法 else { return L.elem[i - 1]; } return 0;}int main(){ Seqlist L; int i, d, n, t; printf("请输入顺序表的初始元素个数: "); scanf("%d", &n); //n个数的线性表 SeqInitial(L); //初始化一个线性表 printf("请输入数据: "); for(i = 1; i <= n; i++) //输入数据 { scanf("%d", &d); ListInsert(L, i, d); //i为位置 } printf("表长: %d\n", L.length); //输出表的长度 printf("表数据如下: "); for(i = 1; i <= L.length; i++) //遍历整个顺序表并输出 { printf("%d ", L.elem[i - 1]); } printf("\n"); printf("请输入要删除元素的位置: "); scanf("%d", &t); //删除元素的位置 ListDelete(L, t, d); printf("被删除元素的值: %d\n", d); printf( "删除后的表:"); for(t=1; t<=L.length; t++) printf("%d ",L.elem[t-1]); //删除后的表 printf("\n"); printf("请输入要插入数值的位置: "); scanf("%d", &t); printf("请输入要插入数值的数值: "); scanf("%d", &d); ListInsert(L, t, d); printf( "插入以后的表:"); for(t=1; t<=L.length; t++) //插入以后的表 printf("%d ",L.elem[t-1]); printf("\n"); printf("请输入要检索的元素的位置: "); //检索元素 scanf("%d", &t); d = GetElem(L, t); printf("该元素的值为:%d\n",d); printf("谢谢使用请挂机\n"); return 0;}
阅读全文
0 0
- 顺序表】相关应用与基础操作函数【SDUT_2017_暑假
- 顺序表相关操作
- 顺序表相关操作
- 顺序表的相关操作
- 顺序表的相关操作
- 数据结构-顺序表相关操作
- 顺序表及相关操作
- 顺序表的相关操作
- 暑假集训二顺序表-顺序表应用6:有序顺序表查询
- 暑假集训二顺序表-顺序表应用5:有序顺序表归并
- 顺序表基础操作--练习
- 暑假集训二顺序表-顺序表应用2:多余元素删除之建表算法
- 暑假集训二顺序表-顺序表应用3:元素位置互换之移位算法
- 暑假集训二顺序表-顺序表应用1:多余元素删除之移位算法
- 【js基础】数组相关操作函数
- 顺序表的函数操作
- 数据结构顺序表相关基本操作练笔
- 线性表的基本操作实现及其应用之顺序表的建立与操作实现
- 编程NOTES
- Linux下vim的tag用法
- laravel实现下载文件
- 设计模式之单例模式
- 吾皇 巴扎黑
- 顺序表】相关应用与基础操作函数【SDUT_2017_暑假
- PHP的数据类型转换
- AES加解密算法
- Linux的find命令实例详解和mtime ctime atime
- 浏览器内核 css浏览器的兼容性写法
- go web 编程
- Redis 有序集合
- mysql主主复制配置
- Eclipse 源代码里 中文乱码