线性表之连续存储(数组)
来源:互联网 发布:大淘客cms要多久能过 编辑:程序博客网 时间:2024/06/05 19:54
经过一段忙碌的学习,今天总算有时间将数据结构C语言代码整理一下。
总的来说,这段时间还是很有收获的,原来根本写不出来的线性存储之连续存储(数组)篇可以完全自主的写出来了。
可能还有一些不熟悉,代码的健壮性也欠考虑。但万事开头难嘛。
如果哪里有错误或者不足的地方,希望各路路过的大神多多提点意见。
ADT List{ 基本操作: InitList(&L) 操作结果:构造一个空的线性表L。ListEmpty(L) 初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE。ListInsert(&L,i,e) 初始条件:线性表L已存在。操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加1。 ListDelete(&L,i,&e)初始条件:线性表L已存在且非空。操作结果:删除L的第i个数据元素,并用e返回其值,L的长度增1。 }ADT List
/*
目的:构造一个动态数组InitList();
作用:可完成append(追加)、ListDlete(删除)、ListInsert(插入)、show(显示)、判断空满等功能。
*/
----参考 《郝斌数据结构自学视频》、《数据结构C语言版》(严蔚敏)
#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct Arrary{ //构造一个名为Arrary的结构体int *pBase; //首地址 int len;//最大长度 int cnt;//有效长度 };/***********初始化数组*************/int InitList(struct Arrary *L, int length){L->pBase=(int *)malloc( sizeof(int) * length );if(L->pBase==NULL){printf("分配内存失败!\n");}else{L->len=length;L->cnt=0;}} /********判断是否为空**********/ bool is_empty(struct Arrary *L){if(L->cnt==0)return 1;else return 0;}/********判断是否为满*********/ bool is_full(struct Arrary *L){if(L->cnt==L->len)return 1;else return 0;}/*********追加操作*********/ int append(struct Arrary *L, int e){if(is_full(L)){printf("追加失败!\n");exit(-1);}else{L->pBase[L->cnt++]=e;}}/**********插入**************/ int ListInsert(struct Arrary *L, int pos, int e){if(pos<1||pos>L->cnt){printf("插入失败!\n");}else{printf("插入成功!\n");for(int i=L->cnt-1; i>=pos-1; i--){L->pBase[i+1]=L->pBase[i];} L->pBase[pos-1]=e;L->cnt++; }}/**********删除***********/ bool ListDelete(struct Arrary *L, int pos, int *e){if(pos<1||pos>L->cnt) return 0;else{//printf("删除成功!\n");*e=L->pBase[pos-1];for(int i=pos; i<=L->cnt-1; i++){L->pBase[i-1]=L->pBase[i];}L->cnt--; return 1;}}/**********显示***********/ void show(struct Arrary *L){if(L->cnt==0)printf("数组为空!\n");else{for(int i=0; i<L->cnt; ++i){printf("%d ",L->pBase[i]);}printf("\n");}}int main(){struct Arrary L;int e;InitList(&L,8);append(&L,1);append(&L,2);append(&L,3);append(&L,4);append(&L,5);append(&L,6);append(&L,7);show(&L); //显示进行追加后的数组 ListInsert(&L,4,99); //插入操作 show(&L); if(ListDelete(&L,2,&e)){ //删除操作 printf("删除的元素是:---%d---\n",e);show(&L);}else printf("删除失败!\n");//while(1);}
0 0
- 线性表之连续存储(数组)
- 线性表之连续存储(数组)
- 线性结构---连续存储[数组]
- 数据结构之线性表----连续存储实现
- 数据结构线性结构之连续存储---数组
- 数据结构学习笔记之线性结构--连续存储[数组]
- 07-数据结构_线性结构-连续存储-数组
- C语言实现线性存储之连续存储
- 线性表(用数组存储数据)
- 数据结构之线性表——链表的顺序存储(数组描述)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之数组
- 线性表(上)之顺序存储
- 线性表(中)之链式存储
- 连续存储的数组
- 连续数组存储
- LeetCode-Remove Duplicates from Sorted Array
- Python之美[从菜鸟到高手]--NotImplemented小析
- Codeforces Round #261 (Div. 2)
- 2015年华为提前招聘机试题--查找完数
- UVA - 297 Quadtrees
- 线性表之连续存储(数组)
- LeetCode 93 Restore IP Addresses
- 出错1Exception in thread "main" java.io.IOException: Cannot run program "C:\winmine.e xe": CreateProce
- hdu 4948 kingdom
- 2015年华为提前招聘机试题--奇数偶数排序
- Android测试工具ThreadingTest开放API接口说明
- teradata 架构介绍
- 实现Linux和arm(arm tiny 6410)的交叉编译
- unity3d插件Daikon Forge GUI 中文教程-1-Daikon Forge介绍