/************************************************************************/
/* 数据结构:动态线性顺序表 */
/* 挑灯看剑-shuchangs@126.com 2010-10 */
/* 云歌国际(Cloud Singers International) www.cocoral.com */
/************************************************************************/
#include "core.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LIST_SIZE sizeof(LIST)
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 5
typedef struct
{
int* elem; //存储空间基地址
int length; //当前长度
int listsize;//当前分配的存储容量
}SqList;
void main()
{
//******函数原型【开始】***************
Status InitList_Sq(SqList* list);
void printList(SqList list);
void printListElem(SqList list);
Status ListInsert_Sq(SqList* L, int i, int e);
Status ListDelete_Sq(SqList* L, int i, int* e);
void autoList_Sq(SqList* L, int n);
Status compare(int e1, int e2);
Status LocateElem_Sq(SqList* L, int e, int* i, Status(*compare)(int, int));
//******函数原型【结束】***************
SqList L =
{
NULL, NULL, NULL
};
if (InitList_Sq(&L))
{
int i = 0, e = 0;
char tag = 'Y'; //输入其他字符结束输入
/*
//动态创建线性顺序表
puts("请输入插入元素位置和元素值!");
scanf("%d %d %c", &i, &e, &tag);
while (tag == 'Y')
{
if (ListInsert_Sq(&L, i, e))
{
puts("插入成功!");
printList(L);
printListElem(L);
}
else
{
puts("插入失败!");
}
puts("请输入插入元素位置和元素值!");
scanf("%d %d %c", &i, &e, &tag);
}
*/
autoList_Sq(&L, 7); //自动化生成线性顺序表
//执行删除操作
puts("请输入删除元素位置!");
scanf("%d", &i);
if (ListDelete_Sq(&L, i, &e))
{
puts("删除成功!");
printf("当前删除元素e=%d\n", e);
}
else
{
puts("删除失败!");
}
printList(L);
printListElem(L);
puts("请输入要查找的元素!");
scanf("%d", &e);
if (LocateElem_Sq(&L, e, &i, compare))
{
puts("查找成功!");
printf("查找元素e=%d,位于第%d位置!\n", e, i + 1);
}
else
{
puts("查找失败!");
}
}
}
Status InitList_Sq(SqList* list)
{
list->elem = (int *) malloc(LIST_INIT_SIZE * sizeof(int));
if (!(list->elem))
exit(OVERFLOW);
list->length = 0;
list->listsize = LIST_INIT_SIZE;
return OK;
}
void printList(SqList list)
{
printf("线性表基地址:%d,线性表长度:%d,线性表当前分配的存储容量:%d\n",
list.elem, list.length, list.listsize);
}
void printListElem(SqList list)
{
int i = 0, n = list.length;
for (; i < n; i++)
{
printf("elem[%d]= %d\n", i + 1, list.elem[i]);
}
}
//在线性顺序表的第i个位置插入元素e
Status ListInsert_Sq(SqList* L, int i, int e)
{
Status ListEmpty(SqList L); //函数原型
//插入前预备性工作
//如果是空表,就将该元素置为第1个位置
if (ListEmpty(*L))
{
*L->elem = e;
L->length = 1;
puts("插入前线性表为空表,插入元素默认置于第1个位置!");
return OK;
}
//如果插入点i不合要求
if (i<1 || i>L->length + 1)
return ERROR;
//如果当前线性列表的长度等于或大于分配的存储容量
if (L->length >= L->listsize)
{
//重新分配存储空间
int* newbase = (int*) realloc(L->elem,
(L->listsize + LIST_INCREMENT) * sizeof(int));
if (!newbase)
exit(OVERFLOW);
L->elem = newbase;
L->listsize += LIST_INCREMENT;
}
//开始插入操作
int* q = L->elem + (i - 1);
//第i个位置到第n位置上的数据先后移一位
int* p = L->elem + (L->length - 1);
for (; p >= q; p--)
*(p + 1) = *p;
*q = e;
++L->length;//长度加1
return OK;
}
//删除线性链表中第i个位置元素,并用元素e返回之
Status ListDelete_Sq(SqList* L, int i, int* e)
{
Status ListEmpty(SqList L);//函数原型
//删除前判断
//如果是空表
if (ListEmpty(*L))
{
puts("删除失败,线性表是空表!");
return ERROR;
}
//如果i超出范围
if (i<1 || i>L->length)
return ERROR;
//如果i符合删除要求
int* p = L->elem + i - 1; //删除位置指针
int* q = L->elem + L->length - 1; //尾指针
*e = *p;
for (; p < q; p++)
{
*p = *(p + 1);
}
--L->length; //长度减1
return OK;
}
Status ListEmpty(SqList L)
{
//初始条件:线性表L已存在
//操作结果:若L为空表,则返回TRUE,否则返回FALSE。
if (L.length <= 0)
return TRUE;
else
return FALSE;
}
void autoList_Sq(SqList* L, int n)
{
//Status ListInsert_Sq(SqList* L, int i, int e);
void printList(SqList list);
void printListElem(SqList list);
int i = 0;
for (; i < n; i++)
{
ListInsert_Sq(L, i + 1, i + 1);
}
printList(*L);
printListElem(*L);
}
//在线性顺序表L中查找元素e,如果成功用i值返回所在位置,并返回TRUE,否则返回FALSE
Status LocateElem_Sq(SqList* L, int e, int* i, Status(*compare)(int, int))
{
int* p = L->elem; //头指针
int* q = L->elem + L->length - 1; //尾指针
for (*i = 0; p <= q; p++)
{
if ((*compare) (*p, e))
break;
++ * i;
}
if (*i < L->length)
return OK;
else
return ERROR;
}
Status compare(int e1, int e2)
{
if (e1 == e2)
return TRUE;
else
return FALSE;
}
运行结果测试如下:
插入前线性表为空表,插入元素默认置于第1个位置!
线性表基地址:3671976,线性表长度:7,线性表当前分配的存储容量:10
elem[1]= 1
elem[2]= 2
elem[3]= 3
elem[4]= 4
elem[5]= 5
elem[6]= 6
elem[7]= 7
请输入删除元素位置!
5
删除成功!
当前删除元素e=5
线性表基地址:3671976,线性表长度:6,线性表当前分配的存储容量:10
elem[1]= 1
elem[2]= 2
elem[3]= 3
elem[4]= 4
elem[5]= 6
elem[6]= 7
请输入要查找的元素!
2
查找成功!
查找元素e=2,位于第2位置!
Press any key to continue
分享到:
相关推荐
这是老师做的关于数据结构中线性顺序表的案例!
数据结构-基于C语言实现线性顺序表的增删改查+排序,合表操作
顺序表;2.线性链表;3.约瑟夫环。 北工大电控学院《数据结构与算法》课程的其它章节程序实验及作业代码亦已在本站上传,需要的同学可进入作者的空间或通过搜索获取。本代码为上传者原创,仅供个人学习参考使用,...
数据结构顺序表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列...顺序表:可动态增长的数组,要求数据是连续存储的
数据结构之线性结构和⾮线性结构 数据结构之线性结构和⾮线性结构 线性结构: ⼀、概念 1. 线性结构作为最常⽤的数据结构,其特点是数据元素之间存在⼀对⼀的线性关系。 2. 线性结构拥有两种不同的存储结构,即顺序...
实验报告 "课程 "数据结构 "实验名称 "实验一 线性表 " "学号 " "姓名 " "实验日期:" " 实验一 线性表 实验目的: 1.理解线性表的逻辑结构特性; 2.熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的...
java实现的线性数据结构动态演示系统,包括链表的插入,删除,合并,顺序表的插入,删除,合并,单线程
(1) 从键盘读入一组整数,按输入顺序形成顺序表。并将创建好的顺序表元素依次打印在屏幕上。 (2) 设计一个带选择菜单的主函数,菜单中具备任意选择删除、插入、查找数据元素的功能。 (3) 当选择删除功能时,从...
数据结构知识点概括 第一章 概 论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑...
不错 我调试过的 符合要求的nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
关于数据结构中顺序表算法的实现,使用C语言代码编写程序。
数据结构线性表,栈和队列以及串和数组章节的知识概括的思维导图,主要有线性表的定义,特点;顺序表、链表的初始化,查找,插入,删除操作的执行与算法。栈和队列的定义,特点,以及插入,删除操作,以及串和数组的...
就是依据不同的数据结构⽽得出的计算⽅法,例如线性的插⼊,删除之类的 三:物理结构(物理储存) 知晓了数据结构,得到了数据计算⽅法,那么接下来就是分析这些数据在计算机硬件中的关系 1.顺序存储的数据在的物理...
1.1 什么是数据结构? 1.2 数据结构涉及哪几个方面? 1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么? 1.4 线性结构的特点...
顺序表是一种线性存储结构,它采用一段连续的物理地址存储数据元素,具有元素随机存取、存储密度高、插入和删除操作效率低等特点。在顺序表中,数据元素按照一定的顺序存储,在程序中可以直接通过元素下标进行访问,...
1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。 4.判断该顺序表中元素是否对称,对称返回1,否则返回0。 5.实现把该表中所有...
第一章 绪论 1、 数据结构主要包括哪三方面内容? 2、 数据结构是一个二元组(D,R),其中D、R分别代表什么? 3、 什么是逻辑结构?什么是存储结构?两者有何关系? 4、 逻辑结构主要分哪两个类型? 5、 存储结构...
数据结构 数据结构-线性结构 线性结构 线性表 线性表 线性表是最简单最常见的数据结构,属于逻辑结构; 线性表有两种实现⽅式(存储⽅式),分别是顺序实现和链接实现; 定义 定义: 线性表是由n(>=0)个数据元素组成的有限...
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址...
在Java中,顺序表(Sequential List)是一种常见的线性数据结构,它以连续的内存空间存储数据元素,并按照一定的顺序进行操作。顺序表提供了一系列基本操作来插入、删除、访问和修改元素。下面是对Java顺序表的基本...