/* 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. vue+Element 表格中的树形数据

    template部分   只在树形的结构中显示编辑与删除按钮 这里我只是简单的做了一个 v-if 判断在操作列中 ,判断是否存在级别这个字段 <div> <el-table :dat ...

  2. sql语句优化的30种方法

    转载于:https://www.cnblogs.com/Little-Li/p/8031295.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的 ...

  3. ThinkPHP框架获取上一条插入语句产生的id

    今天在fastAdmin框架想搞一个拖动进行排序的功能 遇到一个问题是权重的字段值一样的话拖动会出bug,所以想让权重字段(weigh)的值等于当前id的值, 搜索看到的方法如下 实际应用的地方,是写 ...

  4. IIS_CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现

    CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现 一.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HT ...

  5. Review: Basic Knowledge about WebForm

    Asp.net shanzm

  6. 记netmvc中Html.BeginForm的一个大坑

    在asp.net mvc中,很常使用using(Html.BeginForm()){}来生成表单提交 不传入参数时,默认提交到原始url 最坑的是,此表单自动提交时,会将所在页面的原始url的参数也一 ...

  7. 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践

    腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...

  8. easyui datagird 解决行高不一致问题!

    <style>.datagrid-btable .datagrid-cell {padding: 6px 4px;overflow: hidden;text-overflow: ellip ...

  9. linux ssh免密

    1.ssh-keygen -t rsa 生产密钥 2.ssh-copy-id 192.168.44.10 发布密钥  

  10. spark2.4.2 源码编译

    基于Maven的构建是Apache Spark的参考构建.使用Maven构建Spark需要Maven 3.5.4和Java 8.请注意,从Spark 2.2.0开始,对Java 7的支持已被删除. 包 ...