数据结构——线性表的顺序表示
最近做了个实验,写个线性表,感觉挺好写,但还是发现了几个值得注意的地方,代码如下:
#include<stdio.h>#include<conio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OVERFLOW -2#define OK 1#define ERROR 0#define LIST_INIT_SIZE 10#define LISTINCREMENT 4typedef int Elemtype;typedef int Status;typedef struct{ Elemtype *elem;int length;int listsize;}Sqlist; //线性表结构Status Init_list(Sqlist *L) //构造线性表{ L->elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));if(!L->elem)return(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE;return OK;} Status Insert_list(Sqlist *L,int i,Elemtype e)//插入元素{ Elemtype *p,*q,*newbase;if(i<1||i>L->length+1)return ERROR;if(L->length>=L->listsize) { newbase=(Elemtype *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(Elemtype));if(!newbase)return OVERFLOW; L->elem=newbase; L->listsize+=LISTINCREMENT; } q=&(L->elem[i-1]);for(p=&(L->elem[L->length-1]);p>=&(L->elem[i-1]);p--) *(p+1)=*p; *q=e; ++L->length;return OK; } Status Del_list(Sqlist *L,int i,Elemtype *e)//删除元素{ Elemtype *p;if(i<1||i>L->length)return ERROR; p=&(L->elem[i-1]); *e=*p;for(p++;p<=&(L->elem[L->length-1]);p++) *(p-1)=*p; --L->length;//此处不能free(p-1); 线性表不能随便free 不如链表 return OK; }void DisplayElem(Sqlist *L,int i)//显示一个元素{ printf("%-4d\n",L->elem[i-1]);}void Display_list(Sqlist *L)//显示所有元素{int i;for(i=0;i<L->length;i++) printf("%-4d",L->elem[i]);}void print(){ printf("1)插入\n2)删除\n3)查找一个元素\n4)查看所有元素\n0)退出\n");} int main(){ Sqlist L; Elemtype e;int i,p=1;char select;if(Init_list(&L)==OK) { printf("请分别输入10个元素的数值:\n");for(i=0;i<10;i++) scanf("%d",&L.elem[i]); L.length=10;while(p==1) { p=0; print(); getchar();//接收回车符select=getchar();switch(select) {case '1':printf("请分别输入插入位置和插入的元素:");scanf("%d%d",&i,&e);Insert_list(&L,i,e);p=1;break;case '2':printf("请输入删除的位置:");scanf("%d",&i);Del_list(&L,i,&e);printf("删除的元素为%d\n",e);p=1;break;case '3':printf("请输入显示的元素的位置:");scanf("%d",&i);DisplayElem(&L,i);p=1;break;case '4':Display_list(&L);p=1;break;case '0':p=0;break;default: { printf("输入错误!请重新输入:0-4之间的数字:\n"); getchar(); p=1; } }//switch if(p==1) { printf("\n请输入任意键进入主程序……\n"); getch(); system("cls"); } }//while }//if return 0;}
值得注意的地方:
1)数据结构书中所描述的算法中带‘&’的表示引用该值后还要返回该值。在写程序时函数中应该用‘*’,在主函数中实参应该用‘&’,不能混淆了;
2)结构体中Elemtype *elem 表示线性表的基地址,如果分配了一段空间,则能用数组形式比如L.elem[i],实际上L.elem[i] 即是L.*(elem+i);
即Elemtype *elem即是Elemtype elem[0];
3)比如删除元素后,不要释放空间,否则出错,链表则可以且应该;
4)不能把switch中的内容另外写到一个函数中,因为这样必须得定义一个线性表变量,则不是原来的线性表,就会出错;解决方法可以是用全局变量,不过不好;
5)函数很方便,要常用!
转载于:https://www.cnblogs.com/hsqdboke/archive/2012/03/29/2424387.html
数据结构——线性表的顺序表示相关推荐
- 数据结构-线性表的顺序结构
1 #include "stdio.h" 2 #include "stdlib.h" 3 4 typedef int ElemType; //线性表存储基本类型 ...
- 数据结构——线性表:顺序表、单链表、双链表(C++)
内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...
- 1-2、数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化
学习需要记录,更需要温习! 上一篇我们总结了什么是线性表,线性表的ADT类型,线性表的两种存储类型顺序存储结构和链式存储结构,今天正式进入线性表的顺序存储结构的总结和归纳,也就是数据结构的线性表的顺序 ...
- mysql 线性表_数据结构-线性表之顺序表
线性表 (1)逻辑结构和物理结构 物理结构:数据元素在内存中真实的存放次序,有可能是连续存放的,也可能是散落于内存里. 逻辑结构:为了便于描述数据元素之间的关系,我们想象出数据之间应该有某种的对应关系 ...
- 数据结构-线性表之顺序表
线性表包括顺序表和链表(单链表.双链表等),这里我们简单探讨一下线性表中顺序表的基本操作和实现. 线性表其实就是对数组的一个实现,其逻辑上和物理存储上的地址都是连续的(数组的下标是从0开始的,而线性表 ...
- 数据结构——线性表:顺序表、单向链表、循环链表、双向链表
线性表 是一种数据结构:n个数据元素的有限序列 表示形式: L = (a1,a2...an) a1是线性表的元素,小写. n=0时候为空表 数据元素具有相同特性 相邻元素之间存在序偶关系:即有唯一 ...
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
#include <stdio.h> #include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过 ...
- 【数据结构-线性表】顺序表和链表(几种链表操作技巧+几种链表形式)
链表的操作 链表中的插入(头插) void *insertNode(ListNode *head, ListNode *node) {node->next = head;head = node; ...
- 数据结构-线性表的顺序、链式存储结构
- 【数据结构基础】-线性表的顺序实现(数组实现)基本操作
2019.10.10 [数据结构-线性表的顺序结构] 基本操作:初始化,判断是否空表,清空表,获取表中的第i个元素,查找元素,插入元素,删除元素,获取表的元素个数. 抽象数据类型: #include ...
最新文章
- 一步一步学linq to sql(四)查询句法
- PHP代码程序,php代码自动执行
- java的传值调用什么_Java的传值调用
- 什么是虚拟化,虚拟化的现状
- Pytest参数选项自由执行测试用例详解(二)
- arm体系结构与编程_ARM体系结构基础(1)
- java输入学生名字输出_用java实现:输入学生个数,并输入每个学生的名字还有分数,结果输出分数最高和分数第二高的学生......
- python抛出异常的关键字_浅谈python抛出异常、自定义异常, 传递异常
- Android筑基——深入理解 LayoutInflater.inflate() 方法
- python绘制隐含波动率曲面_如何用python计算隐含波动率
- 202013 启明星辰入侵防御 简单使用手册
- 各主板黑苹果dsdt补丁_苹果系统发展简史
- “海青杯”复赛群雄逐鹿,凡科为青年创业翱翔插上翅膀
- QT实现图片的滚轮缩放、框选放大、拖拽移动
- C语言:L1-070 吃火锅 (15 分)
- matlab数值微分与数值积分
- 使用CAD偏移和阵列命令绘制图形、使用CAD旋转复制命令绘制图形
- gk的树---dfs+贪心
- 如何谋杀一门计算机语言?
- python怎么求圆柱表面积半径和高由键盘输入_Java圆柱体表面积和体积计算代码实例...
热门文章
- DeepFake技术--win7下faceswap环境配置(一)(二)(三)
- python、java、C三种方法打印乘法表
- solr mysql安装教程_Solr安装使用教程
- 用 Truffle 插件自动在Etherscan上验证合约代码
- Go 并发 多线程 goroutine channel 实例
- 【Django 2021年最新版教程15】数据库定义 models字段类型 限制 用法 总结
- kubernetes endpoints是什么
- 微信小程序云开发教程-微信小程序的JS高级-页面间数据传递
- mysql 一条记录的某个字段为空,是否占用存储
- 数据结构和算法——八种常用的排序算法----直接插入排序和希尔排序