#include <stdio.h>
#include <stdlib.h>
#include "test_顺序表声明.h" /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) {
SeqList L1;
ElemType x1;
int i,num=1,num1,num2,num3,num4,num5;
init_SeqList(&L1);//预先清空顺序表,准备开始存放数据
printf("顺序表已初始化,可以直接操作!\n");
printf("0:表示退出\n");
printf("1:表示录入元素\n");
printf("2:插入元素\n");
printf("3:删除元素\n");
printf("4:查找表中元素\n");
printf("5:取某个元素\n");
printf("6:判断顺序表是否为空\n");
printf("7:求顺序表的长度\n");
printf("8:清空顺序表\n");
while(num!=0)
{
printf("\n请输入指令:");
scanf("%d",&num);
switch(num)
{
case 0:exit(0);
break;
case 1:printf("请输入你要输入元素的个数:\n");
scanf("%d",&L1.length);
printf("请开始输入%d个元素\n",L1.length);
for(i=1;i<=L1.length;i++)
{
scanf("%d",&L1.elem[i]);
}
break;
case 2:printf("请输入要插入的元素:\n");
scanf("%d",&num1);
printf("请输入你要插入几号位置:\n");
scanf("%d",&num2);
num1=Inser_SeqList(&L1,num2,num1);
if(num1==1)
printf("插入成功!\n");
else
printf("插入失败!\n");
printList(L1);
break;
case 3:printf("请输入删除元素的位置:\n");
scanf("%d",&num3);
num3=Delete_SeqList(&L1,num3);
if(num3==1)
printf("删除成功!\n");
else
printf("删除失败!\n");
printList(L1);
break;
case 4:printf("请输入你要查找的元素:\n");
scanf("%d",&x1);
num=Location_SeqList(L1,x1);
if(num==-1)
printf("此位置没有元素!\n");
else
printf("此元素位置在:%d\n",num);
break;
case 5:printf("请输入要取元素的位置:\n");
scanf("%d",&num5);
num=Location_SeqList1(L1,num5);
if(num==-1)
printf("此位置没有元素!\n");
else
printf("第%d号位置为:%d",num5,num);
break;
case 6:num=ListEmpty(&L1);
printf("数据表ture表示空,false表示非空\n");
if(num==-1)
{
printf("判断结果为:%c%c%c%c\n",116,117,114,101);
}
else if(num==1)
{
printf("判断结果为:%c%c%c%c%c\n",102,97,108,115,101);
}
else{
printf("程序错误!");
}
break;
case 7:num=LongList(&L1);
if(num==-1)
printf("长度为:0");
else
printf("长度为:%d",num);
break;
case 8:ClearList(&L1);
printf("顺序表已清空!\n");
break;
default:printf("指令错误!请重输!\n");
break;
}
printList(L1); }
return 0;
}

项目的main函数,也是顺序表项目的启动器

#include <stdio.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SeqList;//定义一个顺序表
//初始化顺序表
void init_SeqList(SeqList *L)
{
L->length=0;//长度为0,顺序表自然为空
}
//插入函数
int Inser_SeqList(SeqList *L,int i,ElemType x)
{
int j;
if(L->length==MAXSIZE-1)//表满
{
printf("表满!");
return -1;
}
if(i<1||i>L->length+1)//0号位置不放数据,这句话的意思
{
printf("位置不对\n");
return -1;
}
//排除了所有不能插入的情况后,可以直接开始插入
for(j=L->length;j>=i;j--)
L->elem[j+1]=L->elem[j];//逐个移动位置,直到把待插入的位置空出来
L->elem[i]=x; //待插入的位置空余后,把待插入的数据赋值给那个位置
L->length++;
return 1;
//1表示成功,-1表示不成功
}
//删除函数 待删除的数据表,待删除的位置
int Delete_SeqList(SeqList *L,int i)
{
int j;
if(i<1||i>L->length)
{
printf("不存在%d位置,这个元素\n",i);
return -1;
}
for(j=i;j<=L->length-1;j++)
{
L->elem[j]=L->elem[j+1];//直接向删除位置进行数据移动,把删除位置的数据覆盖掉,完成删除(顺序表)
}
L->length--;//长度收缩,完全丢掉
return 1;
}
//查找函数
int Location_SeqList(SeqList L,ElemType x)
{
int i=1;
//第一个条件跳出,表长不够,或者说查找数据不在此内
//第二个条件跳出,数据被找到了
while(i<L.length&&L.elem[i]!=x)
i++;
if(i>L.length)
return -1;
else
return i;
}
int Location_SeqList1(SeqList L,int i)
{ //第一个条件跳出,表长不够,或者说查找数据不在此内
//第二个条件跳出,数据被找到了
if(i<L.length&&i>0)//判断位置的合法性
return L.elem[i];
else
return -1;
}
//判断线性表是否为空
int ListEmpty(SeqList *L)
{
if(L->length!=0)
return 1;
else
return -1;
} //输出表的长度
int LongList(SeqList *L)
{
if(L->length!=0)
return L->length;
else
return -1;
}
//清空表
int ClearList(SeqList *L)
{
L->length=0;//长度为0,顺序表自然为空
return 1;
}
void printList(SeqList L)
{
int i;
for(i=1;i<=L.length;i++)
{
printf("%-3d",L.elem[i]);
}
}

顺序表所用到的函数,都写在了"test.函数"之中

//项目函数声明
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SeqList;//定义一个顺序表
SeqList *L;
void init_SeqList(SeqList *L);
int Inser_SeqList(SeqList *L,int i,ElemType x);
int Delete_SeqList(SeqList *L,int i);
int Location_SeqList(SeqList L,ElemType x);
int Location_SeqList1(SeqList L,int i);
int ListEmpty(SeqList *L);
int LongList(SeqList *L);
int ClearList(SeqList *L);
void printList(SeqList L);

项目的函数声明,项目也必须要这个声明,一般不声明编译器会自己改动函数的返回值为int,但是我们的输入值可能为:float,double,char等等

此项目都是用的int,可能不用声明结果不会错,但是现实中大部分情况都是有问题的。

C语言项目实现顺序表的更多相关文章

  1. 数据结构C语言版--动态顺序表的基本功能实现(二)

    /* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...

  2. C语言实现的顺序表

    顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...

  3. C语言学习笔记-顺序表

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include "coni ...

  4. C语言版本:顺序表的实现

    seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<cstdio> #include<malloc.h> ...

  5. c语言描述的顺序表实现

    //顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作) #include<stdio.h> #include<stdlib.h> #define OK 1 #defi ...

  6. 数据结构C语言版--静态顺序表的基本功能实现(一)

    /* * 功能:创建一个线性表,并输出 * 静态分配内存 */ #include<stdio.h> //stdio.h是C的标准I/O库 //#include<iostream> ...

  7. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  8. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  9. C语言顺序表的实现

    今天本来想写段代码练练手,想法挺好结果,栽了个大跟头,在这个错误上徘徊了4个小时才解决,现在分享出来,给大家提个醒,先贴上代码: /********************************** ...

随机推荐

  1. Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)

    安装之前的准备: 安装docker 使用国内 daocloud 一键安装命令: curl -sSL https://get.daocloud.io/docker | sh 直接从dockerhub下载 ...

  2. python appium server代码启动和关闭遇到的坑

    第一次使用博客,小白级,互相交流,有说的不对的地方欢迎来喷!!! 自动化的目的就是减少人工成本,如果每次跑自动化用例时都要手动起appium客户端,太费事了~~故,将appium server的调起和 ...

  3. 【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测

    前言 因为工作需要,久违的从自己的有道云笔记中去寻找压测相关的内容,翻开之后发现还不错,温故一遍后顺便整理出来分享给大家. 题外话,工作8年多,有道云笔记不知不觉都6G多了,扫一眼下来尽是云烟过往,竟 ...

  4. git 本地项目关联新repo

    git initgit remote add origin repo-url git pull origin master --allow-unrelated-histories git add . ...

  5. 如何让 Windows 把 TypeScript 文件当作文本文件

    TL;DR 修改注册表项 HKEY_CLASSES_ROOT\.ts 为 HKEY_CLASSES_ROOT\.txt 的值 起因 Windows10 总把 TypeScript 文件自动当成视频,放 ...

  6. CMake进行C/C++开发(linux下)

    开发环境配置 安装GCC,GDB sudo apt update # 通过以下命令安装编译器和调试器 sudo apt install build-essential gdb 安装成功确认 # 以下命 ...

  7. DOM获取元素、修改元素

    ## DOM获取元素.修改元素### 1.DOM#### ①什么是DOM?作用? > DOM是文档对象模型 > 作用:操作网页内容,可以开发网页内容特效和实现用户交互.#### ②DOM对 ...

  8. [算法学习] 换根dp

    换根dp 一般来说,我们做题的树都是默认 \(1\) 为根的.但是有些题目需要计算以每个节点为根时的内容. 朴素的暴力:以每个点 \(u\) 作为 \(root\) 暴力dfs下去,复杂度\(O(n^ ...

  9. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  10. AT32F415 修改时钟和晶振方法(原创)

    1. 简介 我们几乎是国内第一批使用AT32F415芯片的客户,那个时候芯片还没涨价,岁月一切静好.使用AT32F415 做了几个小产品,也在持续出货.后来大家都知道,涨价缺货愈演愈烈.好在我们提前囤 ...