顺序表及基本操作(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 ...
随机推荐
- Python——控制鼠标键盘
一.安装包 pip install pynput 二.引用包 from pynput import mouse,keyboard 三.控制鼠标 from pynput.mouse import But ...
- woj1018(HDU4384)KING KONG 循环群
title: woj1018(HDU4384)KING KONG 循环群 date: 2020-03-19 09:43:00 categories: [acm] tags: [acm,woj,数学] ...
- 鸟哥的linux私房菜——第九章学习(vim编辑器)
第九章vim编辑器 1.0).vi与vim Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, 与 vim 等等. vi的优势: 所有的 Unix ...
- leetcode 2 两数相加 考虑溢出
先用int存了结果然后出错,int溢出了. 真是憨批嗷. 不用考虑保存结果,直接一位一位计算就行. 感觉被描述误导了. /** * Definition for singly-linked list. ...
- Spring(三) Spring IOC 初体验
Web IOC 容器初体验 我们还是从大家最熟悉的 DispatcherServlet 开始,我们最先想到的还是 DispatcherServlet 的 init() 方法.我们发现在 Dispath ...
- 杭电多校HDU 6586 String(预处理 + 贪心)题解
题意: 给你一个串,现需要你给出一个子序列,满足26个约束条件,\(len(A_i) >= L_i\) 且 \(len(A_i) <= R_i\), \(A_i\)为从a到z的26个字母. ...
- 010. NET5_命令参数读取+配置多种读取
上节课遗留问题:上节脚本启动后,CSS样式丢失问题 解决办法:a.拷贝丢失的wwwroot目录:b. 给UesStaticFiles类指定读取wwwroot目录 静态文件读取 Nuget引入:Micr ...
- Flutter CLI commands All In One
Flutter CLI commands All In One Flutter run key commands. r Hot reload. R Hot restart. h Repeat this ...
- Jamstack Conf 2020
Jamstack Conf 2020 Jamstack Conf Virtual https://jamstackconf.com/virtual/ Conf Schedule https://jam ...
- project config generator
project config generator React, Vue, https://createapp.dev/ parcel https://parceljs.org/ https://git ...