作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考。

 #include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int

顺序表的基本操作之结构体的创建:

 typedef struct
{
int *elem;//存储空间基址,也就是该数据得到的内存分配的起始地址
int length;//当前长度
int listsize;//当前分配的存储容量
} SqList;

构造一个空的线性表:

int InitList_Sq(SqList &L) //&此符号不是c语言里的取地址符号,而是C++里的引用符号,用法为为主函数里的T,取一个别名,这样子对L操作即相当于对T操作
{
// 该线性表预定义大小为LIST_INIT_SIZE
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
//ElemType即为int
if(!L.elem) return ;//malloc返回值为void*,void* 类型可以强制转换为任何其它类型的指针,在这里L.elem为非零。
L.length=;
L.listsize=LIST_INIT_SIZE;//LIST_INIT_SIZE=100
return OK; }

在顺序线性表L中第i个位置之前插入新的元素e:

 int ListInsert_Sq(SqList &L,int i,int e)
{
int *newbase;//声明整型指针变量
int *q,*p;
if(i<||i>L.length+) return ERROR;//判断i值是否合法,1<i<L.length+1
if(L.length>=L.listsize)//判断当前长度是否大于当前的存储容量,如果大于,则增加LISTINCREMENT长度,即10
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) return ;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-]);//把插入位置的地址赋值给q
for(p=&(L.elem[L.length-]); p>=q; p--)
*(p+)=*p;//把i后面的元素都向后移一位
*q=e;//在i位置插入e
++L.length;//长度增加
return OK;
}

在顺序线性表L中删除第i个位置的元素,并用e返回其值:

int ListDelete_Sq(SqList &L,int i, int &e)
{
// i的合法值为1≤i≤L.length
int *p;
int *q;
if(i<||i>L.length) return ERROR;
p=&(L.elem[i-]);//把i位置的地址赋值给p
e=*p;//把i位置的值赋值给e
q=L.elem+L.length-;
for(++p; p<=q; ++p)
*(p-)=*p;//i后面的元素向前移一位,直接覆盖i位置的值
--L.length;//长度减少
return OK;
}

顺序表基本操作之输出:

int Load_Sq(SqList &L)
{
// 输出顺序表中的所有元素
int i;
if(L.length==) printf("The List is empty!");
else
{
printf("The List is: ");
for( i=; i<L.length; i++) printf("%d ",L.elem[i]); // 请填空
}
printf("\n");
return OK;
}

下面是主函数:

 int main()
{
SqList T;
int a, i;
ElemType e, x;
if(InitList_Sq(T)) // 判断顺序表是否创建成功
{
printf("A Sequence List Has Created.\n");
}
while()
{
printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
scanf("%d",&a);
switch(a)
{
case :
scanf("%d%d",&i,&x);
if(!ListInsert_Sq(T,i,x)) printf("Insert Error!\n"); // 判断i值是否合法
else printf("The Element %d is Successfully Inserted!\n", x);
break;
case :
scanf("%d",&i);
if(!ListDelete_Sq(T,i,e)) printf("Delete Error!\n"); // 判断i值是否合法
else printf("The Element %d is Successfully Deleted!\n", e);
break;
case :
Load_Sq(T);
break;
case :
return ;
}
}
}

顺序表的基本操作【c语言】【创建、插入、删除、输出】的更多相关文章

  1. 链表的C++实现——创建-插入-删除-输出-清空

    注:学习了数据结构与算法分析后,对链表进行了C++实现,参考博文:http://www.cnblogs.com/tao560532/articles/2199280.html 环境:VS2013 // ...

  2. 顺序表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; # ...

  3. C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...

  4. 顺序表的基本操作(C)

    在顺序存储结构实现基本操作:初始化.创建.插入.删除.查找.遍历.逆置.合并运算. 运行示例: 请输入线性表La的长度: 请输入线性表La中的元素(共5个) *** 此时线性表La中的元素 *** * ...

  5. 数据结构中的顺序表和链表(Python语言)

    转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...

  6. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  7. 【C++/数据结构】顺序表的基本操作

    <span style="font-size:18px;"><strong>#pragma once #include <iostream> u ...

  8. 平衡二叉树算法实现 c语言版 插入 删除

    #include <stdio.h>#include <malloc.h>#include<stdlib.h> #define EQ(a,b) ((a)==(b)) ...

  9. [PHP] 数据结构-链表创建-插入-删除-查找的PHP实现

    链表获取元素1.声明结点p指向链表第一个结点,j初始化1开始2.j<i,p指向下一结点,因为此时p是指向的p的next,因此不需要等于3.如果到末尾了,p还为null,就是没有查找到 插入元素1 ...

随机推荐

  1. jQuery和原生JS的对比

    原生JS的缺点: 不能添加多个入口函数(window.onload),如果添加了多个,后面的会把前面的覆盖掉 原生js的api名字太长,难以书写,不易记住 原生js有的代码冗余 原生js中的属性或者方 ...

  2. Codeforces Round #553 (Div. 2) 【C. Problem for Nazar】

    题目大意: 一开始第一行是 1,第二行是2 4 ,第三行是3 5 7 9 ,类似这样下去,每一行的个数是上一行的个数,然后对这些点从第一个进行编号,问你从[l,r]区间数的和. 思路:分别求出奇数和偶 ...

  3. sql 存储过程记录

    -- exec sp_helptext add_book1 CREATE proc add_book1 --创建存储过程 @DocCode VARCHAR() --创建参数 as BEGIN INSE ...

  4. springmvc集成webService需要的jar包

  5. 3-自定义构造方法和description方法

    http://www.cnblogs.com/mjios/archive/2013/04/19/3031412.html -自定义构造方法和description方法 1 默认的构造方法是什么?有什么 ...

  6. 七、find 文件查找

    在文件系统上查找符合条件的文件 locate :依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务) 手动更新数据库(updatedb) 非实时查找 模糊查找 索引构建过程需要遍历 ...

  7. RuntimeException和Exception的区别

    1.java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 2.Error是Throwable 的子类,用于指示合理的应用 ...

  8. windows下使用curl命令&&常用curl命令

    什么是curl命令? curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在windo ...

  9. tecplot 把散点绘成曲面图【转载】

    转载自:http://blog.sina.com.cn/s/blog_a319f5ff0101q6s8.html 找了好久,终于自己研究出来,如何使用tecplot绘制曲面图了 第一步:数据的整理 如 ...

  10. java安全学习-Code-Breaking Puzzles-javacon详细分析

    本文首发于合天智汇: https://mp.weixin.qq.com/s/XWpe3OGwH1d9dYNMqfnyzA 0x01.环境准备 需要反编译的jar包如下所示 直接通过以下步骤将jar文件 ...