/*
* 功能:创建一个线性表,并输出
* 静态分配内存
*/
#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语言版--静态顺序表的基本功能实现(一)的更多相关文章

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

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

  2. 数据结构C语言版干货------->线性表之顺序表

    一:头文件定义 /*************************************************************************** *项目 数据结构 *概要 逻辑 ...

  3. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  4. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  5. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  6. C语言实现的顺序表

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

  7. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  8. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  9. SDUT OJ 数据结构上机测试1:顺序表的应用

    数据结构上机测试1:顺序表的应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

随机推荐

  1. table下tbody滚动条与thead对齐的方法且每一列可以不均等

    1 前言 table下tbody滚动条与thead对齐的方法,开始在tbody的td和thead的tr>td,对每一个Item加入百分比,结果是没对齐.也尝试了用bootstrap的col-md ...

  2. String中根据,(逗号)进行分割

    package zhengze; public class StringTest07 { public static void main(String[] args) { String s = &qu ...

  3. WPF插件开发:使用FrameworkElementAdapters时VS报错的问题

    使用MAF开发插件时FrameworkElementAdapters是个坑,查帮助手册发现这个类位于System.AddIn.Pipeline命名空间中,但是添加System.AddIn的引用后发现V ...

  4. 开始写博客,学习Linq(4)

    应该是可以敲代码了,Linq是.NET Framework3.5的功能,该版本的框架同时发布了新增的和更新了得类库,也为C#和VB.NET语言提供了新版本的编译器.Linq的功能支持源于编译器和类库, ...

  5. hihocoder 1341 Constraint Checker【string】

    hihocoder 1341 解释:这道题题目还是比较容易理解,就是根据输入的若干个不等式,校验后面输入的数据是否都满足前面的不等式,满足就输出Yes,只要有一个不满足就输出No.如“A<B&l ...

  6. vtiger7菜单管理

    添加了新模块,但是菜单上却没显示. 和菜单相关的表有4张 我们要把新建的message放到support模块下面 1.把默认的父级目录tools改成support 2. app2tab 0表示不显示, ...

  7. C# 使用委托实现多线程调用窗体的四种方式

    1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...

  8. 自动化部署之gitlab权限管理--issue管理

    一.删除测试项目 先进入项目,选择编辑项目 二.拉取到最下方,移除项目 三 输入你要删除的项目名称 二 创建Group,User,Project 2.1 创建一个组,组名为java Group pat ...

  9. BZOJ1821 [JSOI2010]Group 部落划分 Group Kruskal

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1821 题意概括 平面上有n个点,现在把他们划分成k个部分,求不同部分之间最近距离的最大值. 两个部 ...

  10. HTTP 的长连接和短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...