线性表之顺序表(C语言实现)
线性表是从数据元素的逻辑结构上定义的.
这种数据元素的逻辑结构的特征如下:
1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素.
2.第一个元素无前驱元素,但有后继元素.
3.最后一个元素有前驱元素,单无后继元素.
可以抽象为如下表述:
| 元素1 | 元素2 | 元素3 | 元素4 | 元素5 | 元素6 |
然而同一种逻辑结构在内存中却可以有两种存储方式:1.在内存中连续存储的线性表-----顺序表(如数组)
2.在内存中离散存储的线性表-----链表(如单链表,双链表)
对于顺序表有多重操作:初始化,赋值,插入新值,删除值等
下面的用C代码实现顺序表及其一些常用的操作:
#include<stdio.h>
#define ERROR 0
#define InitSize 20 //顺序表的初始大小
typedef int ElemType;
typedef struct{
ElemType data[InitSize];
int length;
}sqlist;
//顺序表初始化
void InitList(sqlist *L)
{
L->length=;
return ;
}
//获取顺序表的长度
int GetLength(sqlist *L)
{
return L->length;
}
//顺序表赋值
void GiveValue(sqlist *L)
{
int value;
int i=;
while(value!=)
{
printf("Please input %d valueL-------(exit until value equal 0)\n",i+);
scanf("%d",&value);
if(value!=)
{
L->data[i++]=value;
L->length++;
}
}
}
//获取顺序表某个位置的值
ElemType GetValue(sqlist *L,int i)
{
ElemType e;
if(i>L->length||i<)
return ERROR;
int k=;
for(k=;k<L->length;k++)
{
if(k==i-)
e=L->data[k];
}
return e;
}
//获取顺序表某个值的位置
int GetPos(sqlist *L,ElemType value)
{
int pos;
int judeflag=;
int i;
for(i=;i<L->length;i++)
{
if(L->data[i]==value)
{
pos=i+;
break;
}
judeflag++;
}
if(judeflag>=L->length)
return ERROR;
return pos;
}
//在顺序表指定位置插入新的值
void InsertValue(sqlist *L,int pos,ElemType value)
{
if(pos<||pos>L->length)
return ERROR;
int i;
for(i=L->length-;i>pos-;i--)
{
L->data[i+]=L->data[i];
}
L->data[pos]=value;
L->length++;
}
//在顺序表中指定位置删除值
void DeleteValue(sqlist *L,int pos)
{
if(pos<||pos>L->length)
return ERROR;
int i;
for(i=pos;i<L->length;i++)
{
L->data[i-]=L->data[i];
}
L->length--;
}
//显示顺序表
void ShowList(sqlist *L)
{
int i;
printf("The List show below:\n");
for(i=;i<L->length;i++)
{
printf("%d ",L->data[i]);
}
}
//主函数
int main()
{
sqlist L;
InitList(&L);//初始化顺序表
GiveValue(&L);//顺序表赋值
ShowList(&L);//显示线性表
printf("\n\n\n\n");
int flag;
printf("******************************************************\n");
printf("*************choose the operation of List*************\n");
printf("*****************1-指定位置插入值*********************\n");
printf("*****************2-指定位置删除值*********************\n");
printf("*****************3-获取顺序表某个值得位置*************\n");
printf("*****************4-获取顺序表某个位置上的值*********\n");
printf("*****************5-获取顺序表长度*********************\n");
printf("*****************0-退出*******************************\n");
printf("******************************************************\n");
printf("\n\n\n");
printf("Input the value Flag:\n");
scanf("%d",&flag);
printf("flag=%d\n",flag);
int pos,value,len;
switch(flag){
case :
{
printf("Please input the value and position:\n");
scanf("%d %d",&value,&pos);
printf("Insert value=%d in pos=%d\n",value,pos+);
InsertValue(&L,pos,value);
ShowList(&L);
break;
}
case :
{
printf("Please input the position:\n");
scanf("%d",&pos);
printf("Delete value in pos=%d\n",pos);
DeleteValue(&L,pos);
ShowList(&L);
break;
}
case :
{
printf("Please input the value:\n");
scanf("%d",&value);
pos=GetPos(&L,value);
printf("Get value=%d's position is %d\n",value,pos);
ShowList(&L);
break;
}
case :
{
printf("Please input the position:\n");
scanf("%d",&pos);
value=GetValue(&L,pos);
printf("Get value=%d from pos=%d\n",value,pos);
ShowList(&L);
break;
}
case :
{
len=GetLength(&L);
printf("the length of List is %d\n",len);
ShowList(&L);
break;
}
case :
printf("you choose to exit\nGoodbye!\n");
}
return ;
}
结果图:
线性表之顺序表(C语言实现)的更多相关文章
- [C++]数据结构:线性表之顺序表
1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + void printList(SeqList L) 遍历顺序表 + int ListLengt ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
- c/c++ 线性表之顺序表
线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...
- [C++]线性链表之顺序表<一>
顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 ...
- [C++]线性链表之顺序表<二>
/* @content 线性链表之顺序表 @date 2017-3-21 1:06 @author Johnny Zen */ /* 线性表 顺序表 链式表[带头指针/不 ...
- 线性表之顺序表C++实现
线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...
- [数据结构 - 第3章] 线性表之顺序表(C++实现)
一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...
- 数据结构Java实现02----线性表与顺序表
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...
随机推荐
- 函数fold 或reduce用法
http://yi-programmer.com/2011-02-24_fold.html http://c2.com/cgi/wiki?FoldFunction http://rwh.readthe ...
- Unix/Linux环境C编程入门教程(35) 编程管理系统中的组
组管理相关函数介绍 相关函数 getgid,setgid,setregid 表头文件 #include<unistd.h> #include<sys/types.h> 定 ...
- UESTC_Big Brother 2015 UESTC Training for Graph Theory<Problem G>
G - Big Brother Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) ...
- magento添加系统sections配置时应注意的事项
(1)只有在新增sections是需要增加对应的acl配置,这个配置可以放在config.xml中或者放在adminhtml.xml中 <adminhtml> <acl> &l ...
- EasyUI DataGrid定制默认属性名称
EasyUI DataGrid绑定服务器返回Json数据的解决方案 1. 服务器返回的数据对象格式,及初始化返回值 public class RequestResult { private int c ...
- 最逼近Mac OS的Linux系统 -- Elementary OS
也不知道有多少人听说过Elementary OS?elementary Project 最开始只有一个 elementary 主题,之后延伸出了很多项目,形成了 elementary Project ...
- yum安裝的包如何保留到本地
一, 很多时候,我们一直用yum安装的软件,但是毫无疑问,很多人都会想yum安装的软件的包存放在哪里了呢? 这是因为yum默认并不保存你所安装的包,那么如何才能保留安装的软件包呢? 方法很简单:修改y ...
- Serializable在C#中的作用——.net中的对象序列化
序列化是指将对象实例的状态存储到存储媒体的过程,在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流,在随后对对象进行反序列化时,将创建出与 ...
- WIN7 Net Configuration Assistant打不开
转自 http://www.cnblogs.com/caojie0432/archive/2013/07/30/3225230.html 作者:db_suploc 今天在安装oracle10g的 ...
- Respond.js让IE6-8支持CSS3 Media Query
原文地址:http://caibaojian.com/respondjs.html 使用方式 官方demo地址:http://scottjehl.github.com/Respond/test ...