数据结构——顺序表(sequence list)
/* sequenceList.c */
/* 顺序表 */
/* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表。 */ #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> #define MAXSIZE 10 /* 顺序表结构 */
typedef struct {
int data[MAXSIZE]; /* 数据列表 */
int last; /* 最后一个元素索引 */
} SeqList; /* 用户界面 */
void interface(void){
puts("+**********************************************+");
puts("+ 0, quit 退出 +");
puts("+ 1, insert 插入 +");
puts("+ 2, delete 删除 +");
puts("+ 3, locate 查找 +");
puts("+ 4, traverse 遍历 +");
puts("+ 5, fill 填充 +");
puts("+ 6, sort(ascend) 排序(升序) +");
puts("+ 7, sort(descend) 排序(降序) +");
puts("+**********************************************+");
} /* 顺序表函数声明 */
SeqList *initSeqList();
int insertSeqList(SeqList*, int, int);
int deleteSeqList(SeqList*, int);
int locateSeqList(SeqList*, int);
void traverseSeqList(SeqList*);
void fillSeqList(SeqList*, int);
void sortSeqList(SeqList*, bool); /* 程序主入口 */
int main(){
SeqList *sl = initSeqList();
int flag, number, index; interface();
for(;;){
printf("Command: ");
scanf("%d", &flag);
switch(flag){
case : printf("Bye!\n"); return ; break;
case :
printf("Enter index and nuumber: ");
scanf("%d %d", &index, &number);
insertSeqList(sl, index, number);
break;
case :
printf("Enter index: ");
scanf("%d", &index);
deleteSeqList(sl, index);
break;
case :
printf("Enter number: ");
scanf("%d", &number);
printf("index: %d\n", locateSeqList(sl, number));
break;
case :
traverseSeqList(sl);
break;
case :
printf("Enter number: ");
scanf("%d", &number);
fillSeqList(sl, number);
break;
case :
sortSeqList(sl, true);
break;
case :
sortSeqList(sl, false);
break;
}
} return ;
} /* 顺序表函数实现*/
/* 初始化顺序表 */
SeqList *initSeqList(){
SeqList *sl = (SeqList*)malloc(sizeof(SeqList));
sl->last = -;
return sl;
}
/* 顺序表的插入 */
int insertSeqList(SeqList *sl, int index, int num){
/* 查看是否顺序表已满 */
if(sl->last==MAXSIZE-){
printf("Sorry, there's no room left in sequence list.\n");
return -;
}
/* 检查插入位置是否合理 */
if(index < || index > MAXSIZE-){
printf("Sorry, wrong position.\n");
return ;
}
/* 插入数据 */
/* 从尾巴开始往前遍历,将index位置(包括index)后面所有元素往后移动一位 */
/* 空出index位置插入num */
for(int i = sl->last; i >= index; i--){
sl->data[i+] = sl->data[i];
}
sl->data[index] = num;
/* 如果last比index大,说明last还是指向最后一位,加一即可 */
/* 反之,则说明last在index前面,需要将last指向index */
if(sl->last>index){
sl->last++;
}else{
sl->last = index;
} return ;
}
/* 删除顺序表元素 */
int deleteSeqList(SeqList *sl, int index){
/* 检查是否为空 */
if(sl->last==-){
printf("Sorry, sequence list is empty.\n");
return ;
}
/* 检查是否在0-L->last范围内 */
if(index < || index > sl->last+){
printf("Sorry, index overflow error!\n");
return -;
}
/* 删除数据 */
/* 从头到尾遍历,找到index,将其后面的所有元素往上提,last-- */
for(int i = index; i < sl->last; i++){
sl->data[i] = sl->data[i+];
}
sl->last--; return ;
}
/* 按值查找顺序表元素 */
int locateSeqList(SeqList *sl, int num){
for(int i = ; i <= sl->last; i++){
if(sl->data[i]==num)
return i;
}
return -;
}
/* 遍历顺序表 */
void traverseSeqList(SeqList *sl){
for(int i = ; i <= sl->last; i++){
printf("%d -> ", sl->data[i]);
}
printf("NULL\n");
}
/* 用num填充顺序表 */
void fillSeqList(SeqList *sl, int num){
for(int i = ; i < MAXSIZE; i++){
sl->data[i] = num;
sl->last = MAXSIZE-;
}
}
/* 排序顺序表 */
void sortSeqList(SeqList *sl, bool ascend){
for(int i = ; i < sl->last; i++){
for(int j = i+; j <= sl->last; j++){
if(ascend){
if(sl->data[i]>sl->data[j]){
sl->data[i] ^= sl->data[j];
sl->data[j] ^= sl->data[i];
sl->data[i] ^= sl->data[j];
}
}else{
if(sl->data[i]<sl->data[j]){
sl->data[i] ^= sl->data[j];
sl->data[j] ^= sl->data[i];
sl->data[i] ^= sl->data[j];
}
}
}
}
}
数据结构——顺序表(sequence list)的更多相关文章
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- hrbust-1545-基础数据结构——顺序表(2)
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...
- c数据结构 顺序表和链表 相关操作
编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...
- 数据结构顺序表删除所有特定元素x
顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...
- 数据结构---顺序表(C++)
顺序表 是用一段地址连续的存储单元依次存储线性表的数据元素. 通常用一维数组来实现 基本操作: 初始化 销毁 求长 按位查找 按值查找 插入元素 删除位置i的元素 判空操作 遍历操作 示例代码: // ...
- 数据结构顺序表Java实现
Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...
- python算法与数据结构-顺序表(37)
1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...
- 数据结构顺序表中Sqlist *L,&L,Sqlist *&L
//定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...
- Java数据结构——顺序表
一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...
随机推荐
- Springboot使用ehcache缓存
本文部分步骤继承于springboot使用cache缓存,如果有不清楚的,请移驾springboot使用cache缓存 ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java ...
- 使用OpenSSL证书操作详解
一.OpenSSL简介 OpenSSL支持多种秘钥算法,包括RSA.DSA.ECDSA,RSA使用比较普遍.官网地址:https://www.openssl.org/,一般CeontOS系统都装有Op ...
- Oracle SQL调优之表设计
在看<收获,不止sql优化>一书,并做了笔记,本博客介绍一下一些和调优相关的表比如分区表.临时表.索引组织表.簇表以及表压缩技术 分区表使用与查询频繁而更新数据不频繁的情况,不过要记得加全 ...
- Socket超时时间设置
你知道在 Java 中怎么对 Socket 设置超时时间吗?他们的区别是什么?想一想和女朋友打电话的场景就知道了,如果实在想不到,那我们就一起来来看一下是咋回事吧 设置方式 主要有以下两种方式,我们来 ...
- Django学习笔记(11)——开发图书管理页面
一,项目题目: 开发图书管理页面 该项目主要练习Django对多个数据库进行增删改查的操作. 二,项目需求: 基础需求:75% 1. 列出图书列表.出版社列表.作者列表 2. 点击作者,会列出其出版的 ...
- ASP.NET Core快速入门(第6章:ASP.NET Core MVC)--学习笔记
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务40:介绍 1.Individual authentication 模板 ...
- WPF ControlTemplate,DataTemplate
The Control Template defines the visual appearance of a control. All of the UI elements have some ki ...
- python常用库简单使用( PyPDF2 )
PyPDF2学习 1 这个模块的名字对大小写是敏感的,所以,确保y是小写的,其他字母都是大写的
- Java中级—转发和重定向的区别
在设计Web应用程序的时候,经常需要把一个系统进行结构化设计,即按照模块进行划分,让不同的Servlet来实现不同的功能,例如可以让其中一个Servlet接收用户的请求,另外一个Servlet来处理用 ...
- BootStrap-treeview 参考
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...