数据结构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 ...
随机推荐
- 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19624.html 在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,w ...
- 学习笔记_Cocos Creator_继承组件单例
官方文档:https://docs.cocos.com/creator/manual/zh/scripting/reference/class.html 前言 单例,在游戏开发中是比较常用的功能,全局 ...
- SpringMVC(1):Web MVC简介
原文出处: 张开涛 Web MVC简介 1.1.Web开发中的请求-响应模型: 在Web世界里,具体步骤如下: 1. Web浏览器(如IE)发起请求,如访问 2. Web服务器(如Tomcat)接 ...
- MyEclipse 2015反编译插件安装
本文转自 MyEclipse 2015反编译插件安装 分享一下下载插件的地址,百度网盘:链接:http://pan.baidu.com/s/1nturiAH 密码:yk73 其次:我来说下具体操作步骤 ...
- __dirname与__filename
(1) __filename变量 node.js中,在任何模块文件内部,可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名. 在应用程序根目录下新建app.js文件,其中代码如 ...
- Laravel attribute casting 导致的 Indirect modification of overloaded property
在 Laravel model 中,设置了某个属性做 array casting. protected $casts = [ 'rounds' => 'array', ]; 但是在 contro ...
- poj2464扫描线好题,树状数组解法
用树状数组解比线段树快了好多,难度也下降许多 分别用两个树状数组维护当前扫描线左侧和右侧的点,离散化y轴即可 #include<iostream> #include<cstring& ...
- 使用事件的preventDefault()方法改变默认行为
事件有属性,还有方法,还有事件.事件本身是个对象^_^ 事件的preventDefault()方法改变默认行为,在事件发生前阻止,不让其发生.这样的应用场景有很多,常见表单验证,如必填字段不能为空. ...
- 使用ssh命令进行远程登录
1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...
- Codeforces 915F Imbalance Value of a Tree
Imbalance Value of a Tree 感觉这种题没啥营养, 排个序算算贡献就好啦. #include<bits/stdc++.h> #define LL long long ...