数据结构C语言版--静态顺序表的基本功能实现(一)
/*
* 功能:创建一个线性表,并输出
* 静态分配内存
*/
#include<stdio.h>                           //stdio.h是C的标准I/O库
//#include<iostream>                        //iostream是C++的标准I/O库
//using namespace std;                      //命名空间
#define LIST_INIT_SIZE 5                    //#define是宏定义
//1。定义结构体                               //定义结构体类型,结构体名为StaticList
typedef struct {
    int elem[LIST_INIT_SIZE];               //结构体成员变量
    int length;                             //线性表长度变量
    int listsize;                           //线性表最大长度变量
}StaticList;
//2.初始化
void InitList_StaticList(StaticList &L){
    L.length = 0;                           //表中实际元素的个数
    L.listsize = LIST_INIT_SIZE;            //这段连续空间可用的最大空间
}
//3.插入表尾
int InsEnd_SList(StaticList &L, int x){     //执行插入操作
    if(L.length == L.listsize){             //插入之前应先判断空间是否足够插入
        printf("空间已满!\n");
        return -1;                          //否就返回-1
    }
    else{
        L.elem[L.length] = x;               //是就插入x的值
        L.length++;                         //元素个数加+
        return 1;                           //返回1
    }
}
//4.插入表头
int InsHead_SList(StaticList &L, int x){
    if(L.length == L.listsize){
        printf("空间已满!\n");
        return -1;
    }
    else{
        for(int i = L.length-1;i >= 0;i--){ //循环从表尾开始i是表的长度减一 ,循环到0的话刚好是循环到表头。
            L.elem[i+1] = L.elem[i];        //L.elem[i]刚好是表最后一位数,因为数组是从0开始的
        }
    L.elem[0] = x;                          //表头的位置移出后把传进的数据加到表头上
    L.length++;                             //长度加以一
    return 1;
    }
}
//5.插入第i位置(包括表头、表尾)
int InsI_SList(StaticList &L,int i,int x){
    if(L.length == L.listsize){
        printf("空间已满!\n");
        return -1;
    }if(i < 1 || i > L.length +1 ){
        printf("位置不合法!\n");
        return -1;
    }
    else{
        for(int j = L.length-1; j >= i-1;j--){
            L.elem[j+1] = L.elem[j];
        }
        L.elem[i-1] = x;
        L.length++;
        return 1;
    }
}
//6.删除表尾
int DelEnd_SList(StaticList &L){
    if(L.length == 0){                      //长度为0
        printf("空表!\n");
        return -1;
    }
    else{
        L.length--;                         //删除表尾元素只需要把长度减一即可
        return 1;
    }
}
//7.删除表头
int DelHead_SList(StaticList &L){
    if(L.length ==0){
        printf("空表!\n");
        return -1;
    }
    else{
        for(int j = 1; j < L.length;j++){
            L.elem[j-1] = L.elem[j];
        }
        L.length--;
        return 1;
    }
}
//8.删除第i位置的元素
int DelI_SList(StaticList &L,int i){
    if(L.length == 0){
        printf("空表!");
        return -1;
    }
    if(i < 1 || i > L.length){
        printf("位置不合法!");
        return -1;
    }
    else{
        for(int j = i; j < L.length; j++){
            L.elem[j-1] = L.elem[j];
        }
        L.length--;
        return 1;
    }
}
//.输出
void print(StaticList &L){                  //一个函数,打印出线性表所有的元素
    for(int i = 0; i <= L.length-1; i++){   //循环打印 ,(若只是i<L.length-1,   L.length就不需要减一)
        printf("%d ", L.elem[i]);           //打印出数组elem[i]的值
    }
    printf("\n");                           //C++中使用cout<<endl作回车
} 
//主函数
int main(void){
    StaticList SL;                          //定义结构体变量 C++语言语法
    //struct StaticList SL;                     //定义结构体变量 C语言语法
    int i,n;
    InitList_StaticList(SL);                //创建SL表
    printf("Enter Number:\n");
    while(1){                               //循环输入
        int x;
        scanf("%d",&x);
        if(x == 9999)                       //如果输入的数为9999时,就停止输入
            break;
        else
            InsEnd_SList(SL,x);             //否则就插入输入的数
    }
    printf("The Array Elem:");
    print(SL);                              //调用打印线性表的函数
    printf("(1).插入表尾:输入要插入的数据:\n");
    scanf("%d",&i);
    InsEnd_SList(SL,i);                     //1.表尾插入操作
    printf("The Array Elem:");
    print(SL);
    printf("(2).插入表头:输入要插入的数据:\n");
    scanf("%d",&i);
    InsHead_SList(SL,i);                    //2.表头插入操作
    printf("The Array Elem:");
    print(SL);
    printf("(3).插入第i位置:输入位置和数据:\n");
    scanf("%d%d",&i,&n);
    InsI_SList(SL,i,n);                     //3.第i位置插入操作
    printf("The Array Elem:");
    print(SL);
    printf("(4).删除表尾元素:\n");
    DelEnd_SList(SL);                       //4.删除表尾操作
    printf("The Array Elem:");
    print(SL);
    printf("(5).删除表头元素:\n");
    DelHead_SList(SL);                      //5.删除表头操作
    printf("The Array Elem:");
    print(SL);
    printf("(6).删除第i位置元素:输入位置:\n");
    scanf("%d",&i);
    DelI_SList(SL,i);                       //6.删除第i位置的元素
    printf("The Array Elem:");
    print(SL);
    return 0;
}数据结构C语言版--静态顺序表的基本功能实现(一)的更多相关文章
- 数据结构C语言版--动态顺序表的基本功能实现(二)
		/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ... 
- 数据结构C语言版干货------->线性表之顺序表
		一:头文件定义 /*************************************************************************** *项目 数据结构 *概要 逻辑 ... 
- 数据结构C语言版 表插入排序 静态表
		数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ... 
- 数据结构C语言版 有向图的十字链表存储表示和实现
		/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ... 
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
		百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ... 
- C语言实现的顺序表
		顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ... 
- 数据结构C语言版 弗洛伊德算法实现
		/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ... 
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
		<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ... 
- SDUT OJ 数据结构上机测试1:顺序表的应用
		数据结构上机测试1:顺序表的应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ... 
随机推荐
- 使用Eclipse创建Web Services
			正文: 项目源文件: 百度云盘/博客园/project/wsServerExample/wsServerExample.rar 参考文献: http://www.ibm.com/developerwo ... 
- Android用户界面开发:Fragment
			Android用户界面开发:Fragment 1:注意事项 3.0以前的Android 版本要使用FragmentActivity 来装载Fragment ,使用到support v4包. 3.0 ... 
- MySQL5.6 GTID Replication
			MySQL 5.6 的新特性之一,是加入了全局事务 ID (Global Transaction ID) 来强化数据库的主备一致性,故障恢复,以及容错能力.官方文档:http://dev.mysql. ... 
- 将SublimeText 添加到鼠标右键的方法
- Visual Studio快速调出异常设置
			使用快捷键: 
- tomcat常用的配置
			这里我们使用tomcat版本:apache-tomcat-7.0.77-windows-x64.zip 为例:下载链接地址为:https://archive.apache.org/dist/tomca ... 
- ubuntu的常用liunx命令
			一.基本命令 1.查看Ubuntu版本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Descriptio ... 
- P1197 [JSOI2008]星球大战  并查集 反向
			题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ... 
- Matrix PKU 2155
			问题描述 给定N * N矩阵A,其元素为0或1.A [i,j]表示第i行和第j列中的数字.最初我们有A [i,j] = 0(1 <= i,j <= N). 我们可以通过以下方式更改矩阵.给 ... 
- 048 hive运行的相关配置
			一:执行SQL的方式 1.配置的键值 2.minimal下运行fetch 3.设定hive.fetch.task.conversion=more 4.在more下运行fetch 二:虚拟列 一共三个虚 ... 
