/* 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)的更多相关文章

  1. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  2. hrbust-1545-基础数据结构——顺序表(2)

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...

  3. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  4. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  5. 数据结构---顺序表(C++)

    顺序表 是用一段地址连续的存储单元依次存储线性表的数据元素. 通常用一维数组来实现 基本操作: 初始化 销毁 求长 按位查找 按值查找 插入元素 删除位置i的元素 判空操作 遍历操作 示例代码: // ...

  6. 数据结构顺序表Java实现

    Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...

  7. python算法与数据结构-顺序表(37)

    1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...

  8. 数据结构顺序表中Sqlist *L,&L,Sqlist *&L

    //定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...

  9. Java数据结构——顺序表

    一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...

随机推荐

  1. 第02组 Beta冲刺(5/5)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 验收了小程序的主要功能 制作Beta展示所需要用到的视频 制作Beta展示PPT 准备Beta答辩 提交记录(全组共用) ...

  2. VBA实战 - 一个简单的 httplib

    概要 VBA 的应用场景基本都还是在单机应用, 随着 Web 应用的风靡, 以及浏览器越来越强大, 单机类的应用逐渐没落. 虽然 Web 应用越来越多, 功能和体验也越来越好, 但是 Excel 依然 ...

  3. 微信小程序跳转页面时参数过长导致参数丢失

    问题描述: 微信小程序:跳转页面时传参,参数过长导致参数丢失 跳转到文章详情页时,使用的文章链接e.currentTarget.dataset.id过长导致参数丢失 handleClickArticl ...

  4. 机器学习(十)-------- 降维(Dimensionality Reduction)

    降维(Dimensionality Reduction) 降维的目的:1 数据压缩 这个是二维降一维 三维降二维就是落在一个平面上. 2 数据可视化 降维的算法只负责减少维数,新产生的特征的意义就必须 ...

  5. sso单点登录的入门(Session跨域、Spring-Session共享)

    1.单点登录,就是多系统,单一位置登录,实现多系统同时登录的一种技术.单点登录一般是用于互相授信的系统,实现单一位置登录,全系统有效的. 区分与三方登录(第三方登录) ,三方登录:某系统,使用其他系统 ...

  6. C# SmtpClient 发邮件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Python - 时间相关与计划任务

    Python - 时间处理与定时任务 1.计算明天和昨天的日期 # 获取今天.昨天和明天的日期 # 引入datetime模块 import datetime #计算今天的时间 today = date ...

  8. ef linq多表查询(三表)

    var ph = (from c in reef.CQICC_CLIENT join v in reef.CQICC_VISIT_CLIENT on c.CLIENT_T_ID equals v.CL ...

  9. pycharm工具设置py模板

    直接上截图把,更加明确清晰 (a)shebang行 #!/usr/bin/python3 (b)预定义的变量要扩展为格式为$ {<variable_name>}的相应值. 可用的预定义文件 ...

  10. 一款好用的SSH工具“FinalShell”

    FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网 ...