#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语言)的更多相关文章

  1. 顺序表的基本操作【c语言】【创建、插入、删除、输出】

    作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考. #include<stdio.h> #i ...

  2. C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...

  3. 顺序表的基本操作(C)

    在顺序存储结构实现基本操作:初始化.创建.插入.删除.查找.遍历.逆置.合并运算. 运行示例: 请输入线性表La的长度: 请输入线性表La中的元素(共5个) *** 此时线性表La中的元素 *** * ...

  4. 数据结构中的顺序表和链表(Python语言)

    转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...

  5. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  6. 【C++/数据结构】顺序表的基本操作

    <span style="font-size:18px;"><strong>#pragma once #include <iostream> u ...

  7. C语言实现顺序表(顺序存储结构)

    顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...

  8. 数据结构——Java实现顺序表

    一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...

  9. 使用JAVA数组实现顺序表

    1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象. 2,默认构造方法创建了一个默认大小为16的Object数组:带参数的构造方法创建一个指定长度的O ...

随机推荐

  1. Python——Django框架——Form框架

    一.引入Form包 from django import forms 二.定义规则 class Forms_Login(forms.Form): 用户名 = forms.CharField(requi ...

  2. Linux系统诊断必备技能之二:日志查询常用命令详解

    一.概述 日常运维工作中,排查线上环境问题,少不了去线上查日志.而使用什么命令,能快速准确地查到我们需要查找地日志信息,也是我们需要掌握的一项技能.下面介绍一下日常工作常用到的查看日志命令:tail, ...

  3. Leetcode(15)-三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  4. 计蒜客第五场 UCloud 的安全秘钥(中等) (尺取游标法

    每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...

  5. 云原生系列3 pod核心字段

    pod是容器化的基础,好比大楼的地基. Pod跟容器的关系 类比一下: POD: 物理机容器: 物理机上的一个进程: 容器只是Pod的一个普通字段. Pod的作用范围 跟容器的linux namesp ...

  6. 读写 LED 作业 台灯的 频闪研究1

    读写 LED 作业 台灯的 频闪研究: 核心提示: 随着科技的持续发展,目前已经商业化的照明产品从第一代的白炽灯: 第二代的荧光灯.卤灯: 第三代的高强度气体放电灯; 以及当下主流的, 第四代的发光二 ...

  7. docthis & VS code

    docthis & VS code JSDoc 3 http://usejsdoc.org/ http://usejsdoc.org/about-getting-started.html ht ...

  8. cnblogs 日期错乱 bug

    cnblogs 日期错乱 bug 时间错乱 bug archive/2004/01/13/ 什么鬼 呀默认时间戳 https://www.cnblogs.com/xgqfrms/archive/200 ...

  9. DOH & TRR & HTTPS & DNS

    DOH & TRR & HTTPS & DNS DNS over HTTPS Trusted Recursive Resolver DNS 解析过程图解 DNS 解析过程 递归 ...

  10. how to change svg polygon size by update it's points in js

    how to change svg polygon size by update it's points in js matrixTransform https://stackoverflow.com ...