数据结构 线性表操作

输入样例:

4
1 1 11
2 2
3 3
4

输出样例:

1
3
11 2 3 4 5 6 7 8 9 10
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>


//函数状态码定义
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2

typedef int  Status;

//顺序表的存储结构定义
#define LIST_INIT_SIZE  100
#define LISTINCREMENT   10
typedef int ElemType;  //假设线性表中的元素均为整型
typedef struct{
    ElemType* elem;   //存储空间基地址
    int length;       //表中元素的个数
    int listsize;     //表容量大小
}SqList;    //顺序表类型定义
Status ListInsert_Sq(SqList &L, int pos, ElemType e);
Status ListDelete_Sq(SqList &L, int pos, ElemType &e);
int ListLocate_Sq(SqList L, ElemType e);
void ListPrint_Sq(SqList L);

//结构初始化与销毁操作
Status InitList_Sq(SqList &L){
  //初始化L为一个空的有序顺序表
    L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem)exit(OVERFLOW);
    L.listsize=LIST_INIT_SIZE;
    L.length=0;
    return OK;
}


int main() {
    SqList L;

    if(InitList_Sq(L)!= OK) {
        printf("InitList_Sq: 初始化失败!!!\n");
        return -1;
    }

    for(int i = 1; i <= 10; ++ i)
        ListInsert_Sq(L, i, i);

    int operationNumber;  //操作次数
    scanf("%d", &operationNumber);

    while(operationNumber != 0) {
        int operationType;  //操作种类
        scanf("%d", & operationType);

        if(operationType == 1) {  //增加操作
            int pos, elem;
            scanf("%d%d", &pos, &elem);
            ListInsert_Sq(L, pos, elem);
        } else if(operationType == 2) {  //删除操作
             int pos; ElemType elem;
             scanf("%d", &pos);
             ListDelete_Sq(L, pos, elem);
             printf("%d\n", elem);
        } else if(operationType == 3) {  //查找定位操作
            ElemType elem;
            scanf("%d", &elem);
            int pos = ListLocate_Sq(L, elem);
            if(pos >= 1 && pos <= L.length)
                printf("%d\n", pos);
            else
                printf("NOT FIND!\n");
        } else if(operationType == 4) {  //输出操作
            ListPrint_Sq(L);
        }
       operationNumber--;
    }
    return 0;
}
Status ListInsert_Sq(SqList &L, int pos, ElemType e)
{
    if(pos<1||pos>L.length+1) return ERROR;

    int i;
    for(i=L.length+1;i>=pos+1;i--)
        L.elem[i]=L.elem[i-1];
    L.length++;
    L.elem[pos]=e;
    return OK;
}
Status ListDelete_Sq(SqList &L, int pos, ElemType &e)
{
    int i;
    e = L.elem[pos];
    if(pos<1||pos>L.length) return ERROR;
    for(i=pos;i<=L.length-1;i++)
        L.elem[i]=L.elem[i+1];
    L.elem[L.length]=0;
    L.length--;
    return OK;
}
int ListLocate_Sq(SqList L, ElemType e)
{
    int pos;
    for(pos=1;pos<=L.length;pos++)
    {
        if(L.elem[pos]==e) return pos;
    }
    return 0;
}
void ListPrint_Sq(SqList L)
{
    int i;
    //printf("%d\n",L.length);
    for(i=1;i<=L.length;i++)
        printf("%d%c",L.elem[i],i==L.length?'\n':' ');
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PingCAP的专栏

TiDB 源码阅读系列文章(十一)Index Lookup Join

在介绍 Index Lookup Join 之前,我们首先看一下什么是 Nested Loop Join。

3.2K4
来自专栏醒者呆

基础大扫荡——背包,栈,队列,链表一口气全弄懂

提到数据结构,不得不说数据类型,有人将他们比作分子和原子的关系,我们都知道大自然最小的构成单位是原子,数据类型描述的是原子的内部,如质子、中子的情况,而数据结构...

34115
来自专栏社区的朋友们

SRF & SPP 源码走读

关于 SPP 的解读已经很多,本文尝试从另外的角度解读SRF&SPP;的源码。本文所涉及SRF代码皆以3.1.8版本,SPP代码皆以3.0.1版本为准。

8480
来自专栏Java Edge

Sharded源码分析1. 概述2. 继承关系3. 构造函数4. 哈希环的初始化数据定位

2684
来自专栏PingCAP的专栏

TiDB 源码阅读系列文章(四)Insert 语句概览

本文为 TiDB 源码阅读系列文章的第四篇。上一篇文章简单介绍了整体流程,无论什么语句,大体上是在这个框架下运行,DDL 语句也不例外。

3765
来自专栏ml

HDUOJ-----1541 Stars

Stars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav...

2678
来自专栏企鹅号快讯

掌握这8步快速进阶java编程

Java作为一种通用的编程语言可以做很多事情,但怎么学Java就看怎么用了,很多初学者想通过埋头苦学、马不停蹄的敲着代码记住Java基本原理,但一遇到困难便会让...

1915
来自专栏Java Edge

Java 泛型解惑之<? extends T>和<? super T>

使用泛型的过程中,经常出现一种很别扭的情况 比如我们有Fruit类,和它的派生类Apple

692
来自专栏深度学习之tensorflow实战篇

计算机常用算法对照表整理

常用对照: NLP CRF算法: 中文名称条件随机场算法,外文名称conditional random field algorithm,是一种数学算法,是2...

3535
来自专栏.net core新时代

拓扑排序及其实际应用

  最近在做实际项目中遇到了一个问题,如何判断一个层级结构的图是否存在循环引用。刚开始想到了方法是用递归进行判断,后来想到大学学过的拓扑排序可以解决该问题,于是...

1925

扫码关注云+社区