数据结构一一线性表的顺序存储结构之插入操作
2017-12-25 10:27
507 查看
线性表的顺序存储的结构体定义为:
描述顺序存储结构需要三个属性:
存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
线性表的最大存储容量:数组长度MaxSize。
线性表的当前长度:length。
#define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */ typedef struct { ElemType data[MAXSIZE]; /* 数组,存储数据元素 */ int length; /* 线性表当前长度 */ }SqList;
描述顺序存储结构需要三个属性:
存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
线性表的最大存储容量:数组长度MaxSize。
线性表的当前长度:length。
#include <iostream> #include <time.h> using namespace std; #define MAX_SIZE 20 #define OK 1 #define ERROR 0 typedef int ElemType; typedef struct { ElemType iData[MAX_SIZE]; int iLength; }SqList; //顺序表初始化 int InitList(SqList* L) { L->iLength = 0; return OK; } //顺序表建立 SqList CreateList(SqList L) { int i = 0; srand((unsigned)time(NULL)); for (i=0; i<10; i++) { L.iData[i] = rand()%100; L.iLength++; } return L; } int visit(ElemType c) { printf("%d ",c); return OK; } int PrintList(SqList L) { for (int i=0;i<L.iLength;i++) { visit(L.iData[i]); } printf("\n"); return OK; } /************************************************************************ 插入步骤: 1.如果插入位置不合理,抛出异常; 2.如果线性表长度大于等于数组长度,则抛出异常或动态增加容量; 3.从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置; 4.将要插入元素填入位置i处; 5.表长加1。 /************************************************************************/ int ListInsert(SqList* L,int i,ElemType e) { if (i<0 || i>L->iLength+1) /*插入位置不合理*/ { printf("插入位置不合理\n"); return ERROR; } if (L->iLength>=MAX_SIZE) /*线性表长度大于数组长度*/ { printf("线性表长度大于数组长度\n"); return ERROR; } if (i<=L->iLength) /*若插入位置不在表尾*/ { for (int k=L->iLength;k>=i;k--) /*从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置*/ { L->iData[k] = L->iData[k-1]; } } L->iData[i-1] = e; /*将要插入的元素填入位置i处*/ L->iLength++; /*表长加1*/ return OK; } int main() { SqList L; InitList(&L); int value=0,pos = 0; printf("初始化成功,L.length=%d\n",L.iLength); printf("\n1.遍历线性表 \n2.线性表赋值 \n3.线性表插入 \n0.退出 \n请选择你的操作:\n"); char opp = '0'; while (opp != '\0') { scanf("%c",&opp); switch(opp) { case '1': PrintList(L); printf("\n"); break; case '2': L = CreateList(L); printf("CreateList\n"); PrintList(L); printf("\n"); break; case '3': printf("请输入插入元素位置:"); scanf("%d",&pos); printf("请输入插入元素的值:"); scanf("%d",&value); ListInsert(&L,pos,value); printf("插入完毕,现在线性表为:\n"); PrintList(L); printf("\n"); break; } } return OK; }
初始化成功,L.length=0 1.遍历线性表 2.线性表赋值 3.线性表插入 0.退出 请选择你的操作: 2 CreateList 21 28 22 47 53 64 77 16 6 27 3 请输入插入元素位置:3 请输入插入元素的值:233 插入完毕,现在线性表为: 21 28 233 22 47 53 64 77 16 6 27
相关文章推荐
- 数据结构与算法_1:线性表顺序存储结构常见操作
- 数据结构(线性表的操作:建立表,插入元素,删除元素,取元素,置空)
- 数据结构之线性表的顺序存储结构(数组)的插入与删除
- 数据结构之线性表的顺序结构操作2-(删除,插入,查值等)
- 线性表的基本操作:插入、删除、查找等操作在顺序存储结构和链接存储结构上的算法
- 编程内功修炼之数据结构—BTree(二)实现BTree插入、查询、删除操作
- 线性表的顺序存储结构及该结构的插入与删除
- 数据结构之线性表的顺序存储结构
- 数据结构中线性表的基本操作-合并两个线性表-按照元素升序排列
- 数据结构 单链表插入删除操作(c语言实现)
- 数据结构一一线性表的链式存储结构之删除操作
- 数据结构之红黑树(二)——插入操作
- 【数据结构_顺序表_List_0943】顺序表插入操作的实践
- 数据结构基础5.4:堆(HEAP)的基本操作(插入与删除)
- 数据结构一一线性表的链式存储结构之查找操作
- 【数据结构基础】线性表的顺序存储结构
- 数据结构(严蔚敏、吴伟民)——读书笔记-2、 线性表及其基本运算、顺序存储结构
- 【数据结构】顺序线性表的插入、删除、合并实现
- 数据结构笔记(二)线性表的链式表示和基本操作
- 数据结构(1)--线性表顺序表的主要操作的实现