线性表之顺序表(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)最后一个数据元素没有 ...
随机推荐
- synchronized常见用法解析及示例
synchronized作用:保证代码执行的原子性:保证可见性(与volatile作用相同) JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法 ...
- iframe父子页面互调方法和属性
1.iframe子页面调用 父页面js函数 子页面调用父页面函数只需要写上window.praent就可以了.比如调用a()函数,就写成: window.parent.a(); 子页面取父页面中的标签 ...
- netstat和telnet命令在Windows7中的用法(转载)
在网络方面我们常常会用到如下命令: (1)ping命令:我们常常用来判断2台或2台以上的机器间是否网络连通. ping 192.168.1.88 -t 如果想看任何命令的参数是什么意思,我们只需要:命 ...
- Sort Colors 解答
Question Given an array with n objects colored red, white or blue, sort them so that objects of the ...
- sde需要注意的几个常见问题
Desktop 10.4 是32位的,Server 10.4是64位的,因此位的Oracle客户端,位的Oracle客户端. 如果Desktop和Server安装在同一台机器上,那么Oracle客 ...
- Beauty of Array(模拟)
M - M Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Status P ...
- PCI、PCIE配置空间的訪问(MCFG,Bus,Device,Funtion)
一般来说,在x86平台上,有两大类方式能够訪问这一区间的寄存器, 1,配置机制1#或者配置机制2# 訪问时借助in/out指令.请注意,这样的方式有别于一般的in/out指令訪问PCI的IO空 ...
- poj2503--Babelfish(特里一水)
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 32988 Accepted: 14189 Descr ...
- 【求出所有最短路+最小割】【多校第一场】【G题】
题意 A从1要追在N的 B 只能走最短的路 问B最少切断多少条路可以让A不能过来 问B最多切断多少条路A还是能过来 对于1 求出1到N的所有最短路的路径,对其求最小割 对于2 求出长度最小的最短路即可 ...
- CALayer CABasicAnimation
CALayer是UIView可以响应事件.一般来说,layer可以有两种用途:一是对view相关属性的设置,包括圆角.阴影.边框等参数:二是实现对view的动画操控. 因此对一个view进行core ...