顺序表及基本操作(C语言)
#include <stdio.h>
#include <stdlib.h> //基本操作函数用到的状态码
#define TRUE 1;
#define FALSE 0;
#define OK 1;
#define ERROR 0;
#define INFEASIBLE -1; //当不可行时
const int OVERFLOW = -2; //当溢出时
//表中数据元素的最大数量
const int MaxSize = 1000; //Status是新定义的一种函数返回值类型,其值为int型,意义为函数运行结果 状态码
typedef int Status;
//定义一种 数据元素 类型
typedef char ElemType;
//顺序表定义
typedef struct {
ElemType *elem;
int length;
} SqList; //基本操作1:线性表初始化
Status InitList(SqList *list) { //构造一个空的顺序表
list->elem=(ElemType*)malloc(sizeof(ElemType)*MaxSize); //为顺序表分配空间
if(!list->elem) { //存储分配失败
return OVERFLOW;
};
list->length=0; //空表长度为0
return OK; //返回状态
}; //基本操作2:线性表销毁
Status DestroyList(SqList *list) {
if(list->elem){ //线性表存在
free(list->elem); //free(p),p是指针或地址
//free((*list).elem); //也一样
};
return OK;
}; //基本操作3:线性表清空
Status ClearList(SqList *list) {
if(list->length!=0){ //线性表存在
list->length=0;
return OK;
};
}; //基本操作4:求线性表长
int GetLength(SqList list) {
if(list.elem){ //线性表存在
return list.length;
};
} //基本操作5:判断线性表是否为空
int IsEmpty(SqList list) {
if(list.elem){ //线性表存在
if(list.length==0){
return TRUE;
} else {
return FALSE;
}
}
} //基本操作6:根据结点索引i获取相应位置元素的内容
Status GetElem(SqList list,int i,ElemType *elem) {
if(i<1||i>list.length) { //判断i值是否合理
return ERROR;
} else { // 将中间结点值替换为目标结点的值
*elem=list.elem[i-1];
return OK;
}
} //基本操作7:查找与目标元素值相同的元素结点,返回逻辑下标 ,若不存在,返回0
int LocateElem(SqList list,ElemType elem){
int i;
for(i=0;i<list.length;i++){
if(list.elem[i]==elem) return i+1;
}
return 0;
} //基本操作8:插入结点元素到指定位置。(i为逻辑位置)
Status ListInsert(SqList* list,int i,ElemType elem){
if(i<1||i>list->length+1) return ERROR;
if(list->length==MaxSize) return OVERFLOW;
int j;
for(j=list->length-1;j>=i-1;j--){
list->elem[j+1]=list->elem[j];
}
list->elem[i-1]=elem;
list->length++;
return OK;
} //基本操作9:顺序表的结点删除,被删除的结点值保存在参数elem
Status ListDelete(SqList* list,int i,ElemType* elem){
if(i<1||i>list->length) return ERROR;
int j;
*elem=list->elem[i-1];
for(j=i;j<=list->length-1;j++){
list->elem[j-1]=list->elem[j];
}
list->length--;
return OK;
} //基本操作10:顺序表元素遍历输出
Status ListTraverse(SqList list){
int j;
printf("逻辑序号:\t元素值:\n");
for(j=0;j<list.length;j++){
printf(" %d\t\t %c\n",j+1,list.elem[j]);
}
return OK;
}//PriorElem(list,cur_e,&pre_e);
//NextElem(list,cur_e,&next_e); int main(void){
//定义一个线性表
SqList list1;
//初始化线性表
Status initResultCode = InitList(&list1);
//赋值
ElemType elem1,elem2,elem3;
elem1='Y';
elem2='C';
elem3='L';
list1.elem[0]=elem1;
list1.elem[1]=elem2;
list1.elem[2]=elem3;
list1.length=3;
//printf("初始化结果状态码为:%d\n",initResultCode); //1 //清空
/*
printf("清空前线性表长:%d\n",GetLength(list1));
Status clearResultCode = ClearList(&list1);
printf("清空后线性表长:%d\n",GetLength(list1));
printf("清空结果状态码为%d\n",clearResultCode); //1
*/ //销毁 free()配合malloc()
/*
printf("线性表释放前,首结点值:%c\n",list1.elem[0]); //Y
Status destroyResultCode = DestroyList(&list1);
printf("线性表释放后,首结点值:%c\n",list1.elem[0]); //?
printf("销毁结果状态码为%d\n",destroyResultCode); //1
*/ //为空?
/*
int isNull = IsEmpty(list1);
printf("为空?%d\n",isNull);
*/ //遍历
/*
ListTraverse(list1);
*/ //用 中间元素elemx 保存索引到的元素的值
/*
ElemType elemx='L';
Status getElemResult = GetElem(list1,2,&elemx);
printf("\n得到元素?:%d\n",getElemResult);
printf("list1表中 'elem(2)' 中的值:%c\n",elemx);
*/ //查找表中与目标元素值相同的元素的 逻辑位置(第几个)
/*
ElemType elemTargetValue='L'; //目标元素
int resultIndex=LocateElem(list1,elemTargetValue);
printf("目标元素逻辑位置为:%d\n",resultIndex);
*/ //插入
/*
ElemType elemReadyInserted='T';
Status insertResultCode=ListInsert(&list1,1,elemReadyInserted);
printf("插入后表长:%d\n",list1.length);
printf("1号元素值:%c\n",list1.elem[0]);
printf("插入结果状态码:%d\n",insertResultCode);
*/ //删除元素结点
/*
ElemType deletedElem; //保存被删除的结点值
Status deleteResultCode=ListDelete(&list1,1,&deletedElem);
printf("删除结果状态码:%d\n",deleteResultCode);
printf("表长:%d\n",list1.length);
printf("现在的1号结点值:%c\n",list1.elem[0]);
printf("被删除的结点值:%c\n\n",deletedElem);
*/ return 0;
};
顺序表及基本操作(C语言)的更多相关文章
- 顺序表的基本操作【c语言】【创建、插入、删除、输出】
作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考. #include<stdio.h> #i ...
- C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)
经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...
- 顺序表的基本操作(C)
在顺序存储结构实现基本操作:初始化.创建.插入.删除.查找.遍历.逆置.合并运算. 运行示例: 请输入线性表La的长度: 请输入线性表La中的元素(共5个) *** 此时线性表La中的元素 *** * ...
- 数据结构中的顺序表和链表(Python语言)
转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...
- 顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 【C++/数据结构】顺序表的基本操作
<span style="font-size:18px;"><strong>#pragma once #include <iostream> u ...
- C语言实现顺序表(顺序存储结构)
顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...
- 数据结构——Java实现顺序表
一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...
- 使用JAVA数组实现顺序表
1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象. 2,默认构造方法创建了一个默认大小为16的Object数组:带参数的构造方法创建一个指定长度的O ...
随机推荐
- Redis 多实例 & 主从复制
Redis 多实例 多实例目录 [root@db01 ~]# mkdir /service/redis/{6380,6381} 多实例配置文件 # 第一台多实例配置 [root@db01 ~]# vi ...
- we have a problem with promise
we have a problem with promise Q: What is the difference between these four promises? doSomething() ...
- how to input special symbol in macOS
how to input special symbol in macOS 如何在 macOS 中输入特殊符号 1024 ≈ 1000 2^10 == 1024 约等于 1000, 方便用来表示 Opt ...
- JWT All In One
JWT All In One OAuth 2.0 JWT JSON Web Tokens https://jwt.io refs https://www.cnblogs.com/xgqfrms/tag ...
- 使用 js 实现一个中文自动转换成拼音的工具库
使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ...
- Google IO & 2019
Google IO & 2019 Google IO Recap \ https://www.techradar.com/news/google-io-2019-keynote https:/ ...
- 如何在ASP.NET Core中编写高效的控制器
通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...
- C++算法代码——选举学生会
题目来自:https://www.luogu.com.cn/problem/P1271 题目描述 学校正在选举学生会成员,有 n(n\le 999)n(n≤999) 名候选人,每名候选人编号分别从 1 ...
- 24_MySQL插入insert语句
本节涉及SQL语句: -- MYSQL 基础操作 1.插入insert语句 INSERT INTO t_dept(deptno,dname,loc) VALUES(70,"后勤部" ...
- java安全管理器SecurityManager
本文转载自java安全管理器SecurityManager 导语 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如 ...