线性表的顺序存储结构和操作

//线性表的顺序存储结构和操作

#include

#include

#define MAX 100

typedef struct Student{

int num[MAX];

int length;

}student;

//顺序表的顺序存储结构初始化

void initList(student **L)

{

(*L)=(student *)malloc(sizeof(student));

(*L)->length=0;

}

//求表长运算

int listLength(student *L)

{

return L->length;

}

//元素定位运算

int locateElem(student *L,int x)

{

int i=0;

while(ilength){

if(L->num[i]==x)

return i++;

else

i++;

}

return -1;

}

//获取元素运算

int getElem(student *L,int w,int *e){

if(wL->length){

return -1;//返回-1,w位置的元素不存在

}

else{

*e=L->num[w-1];

return 1;//返回1,w位置的元素存在

}

}

//插入运算

int listInsert(student *L,int w,int *e)

{

int j;

if(wL->length+1){

return -1;

}

if(L->length==MAX){

return -1;

}

for(j=L->length;j>=w;j--)

L->num[j]=L->num[j-1];

L->num[w-1]=*e;

L->length++;

return 1;

}

//删除运算

int listDelete(student *L,int w,int *e)

{

int j;

if(wL->length){

return -1;

}

*e=L->num[w-1];

for(j=w;jlength;j++)

L->num[j-1]=L->num[j];

L->length--;

return 1;

}

//遍历运算

void listTraverse(student *L)

{

int i;

for(i=0;ilength;i++){

printf("%d ",L->num[i]);

}

printf("\n");

}

int main()

{

int number;

student **head,*p;

int i;

int w;

int e;

int l;

int s;

head=&p;

initList(head);

for(i=0;i

p->num[i]=i;

p->length=i+1;

}

while(1){

printf("输入0,退出程序\n");

printf("输入1,求表长\n");

printf("输入2,通过元素找位置\n");

printf("输入3,通过位置找元素\n");

printf("输入4,插入元素\n");

printf("输入5,删除元素\n");

printf("输入其它数字,遍历线性表\n");

scanf("%d",&number);

if(number==0){

exit(1);

}

switch(number){

case 1://求表长

l=listLength(p);

printf("线性表的长度为:%d\n",l);

break;

case 2://通过元素找位置

printf("请输入要找位置的元素:\n");

scanf("%d",&e);

w=locateElem(p,e);

if(w

printf("元素 %d 不在线性表中\n",e);

else

printf("元素 %d 在线性表中的%d\n",e,w);

break;

case 3://通过位置找元素

printf("请输入要找元素的位置:\n");

scanf("%d",&w);

s=getElem(p,w,&e);

if(s

printf("位置为 %d 元素不在线性表中\n",w);

els

e

printf("位置为 %d 元素在线性表中为 %d\n",w,e);

break;

case 4://插入元素

listTraverse(p);

printf("请输入要插入的位置:\n");

scanf("%d",&w);

printf("请输入要插入的元素:\n");

scanf("%d",&e);

s=listInsert(p,w,&e);

if(s

printf("位置为 %d 元素不在线性表中\n",w);

else

printf("位置为 %d 元素在线性表中为 %d\n",w,e);

listTraverse(p);

break;

case 5://删除元素

listTraverse(p);

printf("请输入要删除的位置:\n");

scanf("%d",&w);

s=listDelete(p,w,&e);

if(s

printf("位置为 %d 元素不在线性表中\n",w);

else

printf("位置为 %d 元素在线性表中为 %d\n",w,e);

listTraverse(p);

break;

default://遍历线性表

listTraverse(p);

}

}

return 0;

}

//线性表的顺序存储结构和操作

#include

#include

#define MAX 100

typedef struct Student{

int num[MAX];

int length;

}student;

//顺序表的顺序存储结构初始化

void initList(student **L)

{

(*L)=(student *)malloc(sizeof(student));

(*L)->length=0;

}

//求表长运算

int listLength(student *L)

{

return L->length;

}

//元素定位运算

int locateElem(student *L,int x)

{

int i=0;

while(ilength){

if(L->num[i]==x)

return i++;

else

i++;

}

return -1;

}

//获取元素运算

int getElem(student *L,int w,int *e){

if(wL->length){

return -1;//返回-1,w位置的元素不存在

}

else{

*e=L->num[w-1];

return 1;//返回1,w位置的元素存在

}

}

//插入运算

int listInsert(student *L,int w,int *e)

{

int j;

if(wL->length+1){

return -1;

}

if(L->length==MAX){

return -1;

}

for(j=L->length;j>=w;j--)

L->num[j]=L->num[j-1];

L->num[w-1]=*e;

L->length++;

return 1;

}

//删除运算

int listDelete(student *L,int w,int *e)

{

int j;

if(wL->length){

return -1;

}

*e=L->num[w-1];

for(j=w;jlength;j++)

L->num[j-1]=L->num[j];

L->length--;

return 1;

}

//遍历运算

void listTraverse(student *L)

{

int i;

for(i=0;ilength;i++){

printf("%d ",L->num[i]);

}

printf("\n");

}

int main()

{

int number;

student **head,*p;

int i;

int w;

int e;

int l;

int s;

head=&p;

initList(head);

for(i=0;i

p->num[i]=i;

p->length=i+1;

}

while(1){

printf("输入0,退出程序\n");

printf("输入1,求表长\n");

printf("输入2,通过元素找位置\n");

printf("输入3,通过位置找元素\n");

printf("输入4,插入元素\n");

printf("输入5,删除元素\n");

printf("输入其它数字,遍历线性表\n");

scanf("%d",&number);

if(number==0){

exit(1);

}

switch(number){

case 1://求表长

l=listLength(p);

printf("线性表的长度为:%d\n",l);

break;

case 2://通过元素找位置

printf("请输入要找位置的元素:\n");

scanf("%d",&e);

w=locateElem(p,e);

if(w

printf("元素 %d 不在线性表中\n",e);

else

printf("元素 %d 在线性表中的%d\n",e,w);

break;

case 3://通过位置找元素

printf("请输入要找元素的位置:\n");

scanf("%d",&w);

s=getElem(p,w,&e);

if(s

printf("位置为 %d 元素不在线性表中\n",w);

els

e

printf("位置为 %d 元素在线性表中为 %d\n",w,e);

break;

case 4://插入元素

listTraverse(p);

printf("请输入要插入的位置:\n");

scanf("%d",&w);

printf("请输入要插入的元素:\n");

scanf("%d",&e);

s=listInsert(p,w,&e);

if(s

printf("位置为 %d 元素不在线性表中\n",w);

else

printf("位置为 %d 元素在线性表中为 %d\n",w,e);

listTraverse(p);

break;

case 5://删除元素

listTraverse(p);

printf("请输入要删除的位置:\n");

scanf("%d",&w);

s=listDelete(p,w,&e);

if(s

printf("位置为 %d 元素不在线性表中\n",w);

else

printf("位置为 %d 元素在线性表中为 %d\n",w,e);

listTraverse(p);

break;

default://遍历线性表

listTraverse(p);

}

}

return 0;

}


相关内容

  • 数据结构大纲
  • 数据结构大纲 第1章 数据结构概述 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科.数据结构主要有三个方面的内容: 数据的逻辑结构.数据的存储结构和对数据的算法. 逻辑结构:反映数据之间的逻辑关系,是对数据之间关系的描述,主要有集合.线性表.树.图等四种结 ...

  • 谈顺序存储与链式存储的异同
  • 谈顺序存储与链式存储的异同 摘要: 顺序存储与链式存储的应用范围较为广泛.顺序存储就是用一组地址连续的存储单元依次存储该线性表中的各个元素,由于表中各个元素具有相同的属性,所以占用的存储空间相同,而链式存储无需担心容量问题,读写速度相对慢些,由于要存储下一个数据的地址所以需要的存储空间比顺序存储大. ...

  • 线性表的顺序存储结构和实现
  • 石家庄经济学院 实 验 报 告 学 院: 数理学院 专 业: 数学与应用数学 班 级 学 号: XXXXXXXX 姓 名: XXXXXX 信息工程学院计算机实验中心制 实验题目:线性表的顺序存储结构和实现 一.实验内容 1.熟悉C 语言的上机环境,掌握C 语言的基本结构. 2.会定义线性表的顺序存储 ...

  • 线性表习题
  • 线性表习题 一 判断题 1.线性表的逻辑顺序与存储顺序总是一致的.× 2.顺序存储的线性表可以按序号随机存取. 3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动. × 4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同 ...

  • 数据结构笔试面试的总结
  • 堆和栈的区别: 一.堆栈空间分配区别: 1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈: 2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS 回收,分配方式倒是类似于链表. 二.堆栈缓存方式区别: 1.栈 ...

  • 第1章数据结构与算法笔试题考点分析
  • 1算法 考试的内容: 1.1 算法的基本概念 1.算法的概念(必记) : 是指解题方案的准确而完整的描述. 分析:要用计算机实现某一任务时,先应设计出一整套解决问题的指导方案,然后具体实现.整套的指导方案称之为算法,而具体的实现称之为程序.并且在设计指导方案时,可不用过多考虑到实现程序的具体细节(即 ...

  • [数据结构]教学大纲
  • <数据结构>教学大纲 Data Structure 课程编号:J6110G0003 课程性质:学科基础课程 适用专业:计算机科学与技术.网络工程.数字媒体技术 先行课:计算机科学导论.离散数学.高级语言程序设计: 后续课:无 . 学分数:5 主讲教师:任燕.王命延.冯豫华.周石林.王玮立 ...

  • 数据结构与算法面试总结
  • 一. 算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1. 算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2. 算法的基本要素:算法中对数据的运算和操作.算法的控制结构. 3. 算法设计的基本方法:列举法.归纳法.递推.递归.减半递推技术.回溯法. 4. ...

  • 公共基础教材
  • 第一章数据结构与算法 1.1 算法 ★算法:是指解题方案的准确而完整的描述. 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计. 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止. ★特征包括: (1)可行性: (2)确定性, ...

  • 数据结构与算法
  • 数据结构与算法 算法的基本特性:可行性,确定性,有穷性,拥有足够的情报. 算法是指解题方案准确而完善的描述. 算法复杂度包括时间复杂度和空间复杂度. 时间复杂度:执行算法所需要的计算机工作量. 空间复杂度:执行算法所要的内存空间. 数据结构分为逻辑结构和存储结构.常用的存储结构有顺序结构.链式存储结 ...