#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. MyBatis插件 - 通用mapper

    1.简单认识通用mapper 1.1.了解mapper 作用:就是为了帮助我们自动的生成sql语句 [ ps:MyBatis需要编写xxxMapper.xml,而逆向工程是根据entity实体类来进行 ...

  2. 初次接触Java感受

    认真开始研究了idea后端开发环境 感触很深,突然觉得自己不能再一天的颓废下去,认真找点事情做一做,毕竟自己还是一张白纸,趁着自己年纪轻轻 经过一周的摸索自己努力了还不够,心里多么渴望自己身边的人能够 ...

  3. [源码解析] TensorFlow 分布式之 ParameterServerStrategy V1

    [源码解析] TensorFlow 分布式之 ParameterServerStrategy V1 目录 [源码解析] TensorFlow 分布式之 ParameterServerStrategy ...

  4. 204. Count Primes - LeetCode

    Queston 204. Count Primes Solution 题目大意:给一个数,求小于这个数的素数的个数 思路:初始化一个boolean数组,初始设置为true,先遍历将2的倍数设置为fal ...

  5. Spring是如何整合JUnit的?JUnit源码关联延伸阅读

    上一篇我们回答了之前在梳理流程时遇到的一些问题,并思考了为什么要这么设计. 本篇是<如何高效阅读源码>专题的第十二篇,通过项目之间的联系来进行扩展阅读,通过项目与项目之间的联系更好的理解项 ...

  6. CoaXPress 简介

    CoaXPress 背景 CoaXPress (简称CXP)是指一种采用同轴线缆进行互联的相机数据传输标准,主要用于替代之前的cameralink协议,常见于科学相机.工业相机.医学图像.航空防务等场 ...

  7. 协议层安全相关《http请求走私与CTF利用》

    0x00 前言 最近刷题的时候多次遇到HTTP请求走私相关的题目,但之前都没怎么接触到相关的知识点,只是在GKCTF2021--hackme中使用到了 CVE-2019-20372(Nginx< ...

  8. Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查

    今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...

  9. 竟然还有人说ArrayList是2倍扩容,今天带你手撕ArrayList源码

    ArrayList是我们开发中最常用到的集合,但是很多人对它的源码并不了解,导致面试时,面试官问的稍微深入的问题,就无法作答,今天我们一起来探究一下ArrayList源码. 1. 简介 ArrayLi ...

  10. 入坑KeePass(四)KeePass通过坚果云WebDav同步方法

    参考博客:什么值得买平台-Keepass+坚果云:多平台密码无缝同步 .1.在坚果云上创建一个同步专用的文件夹(建议勾上"默认不同步到电脑"选项) 创建之后可以把刚才创建的数据库文 ...