线性表的顺序表示和实现基本操作之插入元素
2017-11-28 15:57
357 查看
//-------线性表的动态分配顺序存储结构------ #include<stdio.h> #include<process.h> #include<stdlib.h> #define OK 1 #define ERROR -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 #define LISTINCREMENT 10//线性表存储空间的分配增量 typedef int Status; typedef int ElemType; typedef struct//typedef的作用:指定新的类型名代替已有的类型名 { ElemType *elem;//定义指向ElemType类型的指针,存储空间基址 int length;//当前长度 int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位) }SqList;//声明一个新类型名SqList,代表上边的结构体类型 Status InitList_Sq(SqList &L)//构造一个空的线性表L { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //数组中第一个元素的地址为数组的地址 if(!L.elem) exit(OVERFLOW);//分配存储空间失败 L.length=0;//空表长度为0 L.listsize=LIST_INIT_SIZE;//初始存储容量 return OK; } int Length(SqList &L) { return L.length; } Status ListInsert_Sq(SqList &L,int i,ElemType e)//在顺序表L的第i个位置之前插入元素e { ElemType *newbase,*p,*q; if(i<1||i>L.length+1) return ERROR;//判断i值是否合法 if(L.length>=L.listsize)//当前长度大于分配容量(当前空间已满),增加分配 { newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW);//存储分配失败 L.elem=newbase;//新基址 L.listsize+=LISTINCREMENT;//增加分配存储容量 } q=&(L.elem[i-1]);//q为插入位置 for(p=&(L.elem[L.length-1]);p>=q;p--)//插入位置及之后的元素后移 *(p+1)=*p; *q=e;//插入e ++L.length;//表长加1 return OK; } Status ListDelete_Sq(SqList &L,int i,ElemType &e)//在顺序表中删除第i个元素,并用e返回其值 { ElemType *p,*q; if(i<1||i>L.length) return ERROR; p=&(L.elem[i-1]);//指针p为第i个元素的地址 e=*p; //被删除元素的值赋给e q=L.elem+L.length-1;//表尾元素的位置 for(++p;p<=q;++p)//被删除元素之后的元素前移 *(p-1)=*p; --L.length;//表长减1 return OK; } int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)) //寻找第一个与e满足compare()关系的元素的位序,没有则返回0 { int i; ElemType *p; i=1;//i的处置为第一个元素的位序 p=L.elem;//p的处置为第一个元素的存储位置 while(i<=L.length&&!(*compare)(*p++,e)) ++i; if(i<=L.length) return i; else return 0; } int main() { SqList L; ElemType e,e1; InitList_Sq(L); for(int i=1;i<=6;i++) { scanf("%d",&e); ListInsert_Sq(L,i,e); } printf("插入元素后表L为:"); for(int i=1;i<=L.length;i++) printf("%d ",L.elem[i-1]); printf("\n"); ListInsert_Sq(L,3,81); printf("插入元素后表L为:"); for(int i=1;i<=L.length;i++) prin 4000 tf("%d ",L.elem[i-1]); printf("\n"); ListDelete_Sq(L,1,e); //printf("%d\n",e); printf("删除元素后表L为:"); for(int i=1;i<=L.length;i++) printf("%d ",L.elem[i-1]); printf("%d\n",e); return 0; }
相关文章推荐
- (1)顺序表的操作 ① 输入一组整型元素序列,建立线性表的顺序存储结构。 ② 实现该线性表的遍历。 ③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。 ④ 在该顺序表中删除或插入指
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 线性表的顺序表示和基本操作的实现
- 实现一个栈(元素遵守先入后出顺序),能够通过 min 方法在 O(1)时间内获取栈中的最小元素。同时,栈的基本操作:入栈(Push)、出栈(Pop),也是在O(1)时间内完成的
- python实现线性表顺序存储的插入操作
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、归并等)
- 顺序线性表的基本操作(C语言实现)
- 编程菜鸟的日记-初学尝试编程-顺序表的类定义及其基本操作算法(创建表、元素插入、元素删除、顺序查找、测表空、求表长、输出等)
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 线性表----队列(顺序表示)的基本操作
- 线性表的顺序表示及其基本操作
- 线性表之顺序表基本操作实现
- C语言实现顺序线性表的表示、插入、删除
- 编程实现顺序表的以下基本操作:建立顺序表,修改顺序表,插入顺序表,删除顺序表。
- 线性表----循环队列(顺序表示)的基本操作
- C++实现顺序结构线性表的基本操作
- 线性表的基本操作实现及其应用之顺序表的建立与操作实现
- 线性表的顺序存储格式基本操作:初始化、插入、删除、查找、打印