最近做了个实验,写个线性表,感觉挺好写,但还是发现了几个值得注意的地方,代码如下:

#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. 数据结构-线性表的顺序结构

    1 #include "stdio.h" 2 #include "stdlib.h" 3 4 typedef int ElemType; //线性表存储基本类型 ...

  2. 数据结构——线性表:顺序表、单链表、双链表(C++)

    内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...

  3. 1-2、数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化

    学习需要记录,更需要温习! 上一篇我们总结了什么是线性表,线性表的ADT类型,线性表的两种存储类型顺序存储结构和链式存储结构,今天正式进入线性表的顺序存储结构的总结和归纳,也就是数据结构的线性表的顺序 ...

  4. mysql 线性表_数据结构-线性表之顺序表

    线性表 (1)逻辑结构和物理结构 物理结构:数据元素在内存中真实的存放次序,有可能是连续存放的,也可能是散落于内存里. 逻辑结构:为了便于描述数据元素之间的关系,我们想象出数据之间应该有某种的对应关系 ...

  5. 数据结构-线性表之顺序表

    线性表包括顺序表和链表(单链表.双链表等),这里我们简单探讨一下线性表中顺序表的基本操作和实现. 线性表其实就是对数组的一个实现,其逻辑上和物理存储上的地址都是连续的(数组的下标是从0开始的,而线性表 ...

  6. 数据结构——线性表:顺序表、单向链表、循环链表、双向链表

    线性表   是一种数据结构:n个数据元素的有限序列 表示形式: L = (a1,a2...an) a1是线性表的元素,小写. n=0时候为空表 数据元素具有相同特性 相邻元素之间存在序偶关系:即有唯一 ...

  7. 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月

    #include <stdio.h> #include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过 ...

  8. 【数据结构-线性表】顺序表和链表(几种链表操作技巧+几种链表形式)

    链表的操作 链表中的插入(头插) void *insertNode(ListNode *head, ListNode *node) {node->next = head;head = node; ...

  9. 数据结构-线性表的顺序、链式存储结构

  10. 【数据结构基础】-线性表的顺序实现(数组实现)基本操作

    2019.10.10 [数据结构-线性表的顺序结构] 基本操作:初始化,判断是否空表,清空表,获取表中的第i个元素,查找元素,插入元素,删除元素,获取表的元素个数. 抽象数据类型: #include ...

最新文章

  1. 一步一步学linq to sql(四)查询句法
  2. PHP代码程序,php代码自动执行
  3. java的传值调用什么_Java的传值调用
  4. 什么是虚拟化,虚拟化的现状
  5. Pytest参数选项自由执行测试用例详解(二)
  6. arm体系结构与编程_ARM体系结构基础(1)
  7. java输入学生名字输出_用java实现:输入学生个数,并输入每个学生的名字还有分数,结果输出分数最高和分数第二高的学生......
  8. python抛出异常的关键字_浅谈python抛出异常、自定义异常, 传递异常
  9. Android筑基——深入理解 LayoutInflater.inflate() 方法
  10. python绘制隐含波动率曲面_如何用python计算隐含波动率
  11. 202013 启明星辰入侵防御 简单使用手册
  12. 各主板黑苹果dsdt补丁_苹果系统发展简史
  13. “海青杯”复赛群雄逐鹿,凡科为青年创业翱翔插上翅膀
  14. QT实现图片的滚轮缩放、框选放大、拖拽移动
  15. C语言:L1-070 吃火锅 (15 分)
  16. matlab数值微分与数值积分
  17. 使用CAD偏移和阵列命令绘制图形、使用CAD旋转复制命令绘制图形
  18. gk的树---dfs+贪心
  19. 如何谋杀一门计算机语言?
  20. python怎么求圆柱表面积半径和高由键盘输入_Java圆柱体表面积和体积计算代码实例...

热门文章

  1. DeepFake技术--win7下faceswap环境配置(一)(二)(三)
  2. python、java、C三种方法打印乘法表
  3. solr mysql安装教程_Solr安装使用教程
  4. 用 Truffle 插件自动在Etherscan上验证合约代码
  5. Go 并发 多线程 goroutine channel 实例
  6. 【Django 2021年最新版教程15】数据库定义 models字段类型 限制 用法 总结
  7. kubernetes endpoints是什么
  8. 微信小程序云开发教程-微信小程序的JS高级-页面间数据传递
  9. mysql 一条记录的某个字段为空,是否占用存储
  10. 数据结构和算法——八种常用的排序算法----直接插入排序和希尔排序