#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. [洛谷] P1065 [NOIP2006 提高组] 作业调度方案

    点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int m, n, ans = 0; ...

  2. [笔记] prufer 序列

    什么是 prufer 序列 是可以和 \(n\) 个有标号节点的无根树一一对应的长度为 \(n-2\) 的序列. 一般来说是用于和树相关的组合计数问题,但是可能会出现一些变形,所以除了要了解一些性质, ...

  3. 简述 private、protected、 public、 internal修饰符的访问权限

    1.private: 私有的,只能在此类中访问 2.protected: 受保护的,只能在此类及其继承类中访问 3.public: 公开的,没有访问限制 4:internal: 内部的,只能在当前程序 ...

  4. navicat软件、 python操作MySQL

    查询关键字之having过滤 having与where的功能是一模一样的 都是对数据进行筛选 where用在分组之前的筛选 havng用在分组之后的筛选 为了更好的区分 所以将where说成筛选 ha ...

  5. Linux磁盘和文件系统知识总结

    硬盘操作 为什么要给硬盘分区? 如果你需要在一块硬盘上用到多个文件系统,那么你就需要对硬盘进行分区,以便用不同的分区支持不同的文件系统.(但一个硬盘只能有一个分区表!)反过来说,如果你整块硬盘都用同样 ...

  6. 1903021121—刘明伟—Java第四周作业—java分支语句学习

    项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第四周作业 要求 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果). 扩展阅 ...

  7. 网络编程之socket套接字

    目录 socket套接字简介 socket模块 通信循环 代码优化 连接循环 半连接池 黏包问题 解决黏包问题 黏包问题特殊情况(文件过大) socket套接字简介 由于操作OSI七层是所有C/S架构 ...

  8. Vue 基础篇---computed 和 watch

    最近在看前端 Vue方面的基础知识,虽然前段时间也做了一些vue方面的小项目,但总觉得对vue掌握的不够 所以对vue基础知识需要注意的地方重新撸一遍,可能比较零碎,看到那块就写哪块吧 1.vue中的 ...

  9. DataX异构数据源离线同步工具json文件配置说明

    DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效的数据同步功能 ...

  10. BitBlt()函数实现带数字百分比进度条控件、静态文本(STATIC)控件实现的位图进度条、自定义进度条控件实现七彩虹颜色带数字百分比

    Windows API BitBlt()函数实现带数字百分比进度条控件. 有两个例子:一用定时器实现,二用多线程实现. 带有详细注解. 此例是本人原创,绝对是网上稀缺资源(本源码用Windows AP ...