首页 > 编程语言 >顺序表的定义、初始化、及插入、删除、查询操作,将算法转化成具体的代码

顺序表的定义、初始化、及插入、删除、查询操作,将算法转化成具体的代码

时间:2023-08-27 11:34:19浏览次数:36  
标签:初始化 return 转化成 int listsize elem char 算法 length


#include <iostream>
using namespace std;
 
#define LIST_INIT_SIZE  100
#define LISTINCREMENT   10
 
int OK=1;
int OVERFLOW=0;
int ERROR=0;
 
/*线性表的定义*/
typedef struct
{
       char *elem;
       int length;//当前长度
       int listsize;//线性表的长度
}SqList;
 
/*线性表的初始化*/
int Initlist(SqList &L)
{
 
       L.elem=(char *)malloc(LIST_INIT_SIZE*sizeof(char));//或者可以写成:L.elem=new char[LIST_INIT_SIZE];
 
       if(!L.elem)
              exit(OVERFLOW);
 
       L.length=0;
       L.listsize=LIST_INIT_SIZE;
       return OK;
}
 
/*插入*/
int ListInsert_Sq(SqList &L,int i,char e)
{
       /*特殊情况的处理*/
       if(i<1||i>L.length)
              return ERROR;
       char * newbase;
       char * p,* q;
       if(L.length>=L.listsize)
       {
              newbase=(char *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(char));
              if(!newbase)
                     exit(OVERFLOW);
              L.elem=newbase;
              L.listsize+=LISTINCREMENT;
       }
 
       /*插入操作*/
       q=&(L.elem[i-1]);//q为第i个元素的位置
       for(p=&(L.elem[L.length-1]); p>=q; p--)
              *(p+1)=*p;//i-1之后的元素依次后移一位
       *q=e;
       L.length++;
 
       return OK;
}
 
/*删除*/
int ListDelete_Sq(SqList &L,int i,char &e)
{
       char * p;
       char * q;
 
       if(i<1||i>L.length)
              return ERROR;//特殊情况的处理
 
       p=&(L.elem[i-1]);
       e=*p;
       q=L.elem+L.length-1;
 
       for(p;p<q;p++)
       {
              *p=*(p+1);
       }//i之后的元素依次左移
       L.length--;
       return OK;
}
 
/*确定表中元素位置*/
int LocateElem_Sq(SqList L, char x)
{
       int i;
       char *p;
       i=1;
       p=L.elem;
       while(i<=L.length && *p++!=x)//必须的控制p不能无限制的加下去,所以得有i来限制,并且用i来返回位置
              i++;
       if(i>L.length)
              return 0;
       else
              return i;  
}
void main()
{
       SqList L;
       Initlist(L);
       int i;
       for(i=0;i<10;i++)
       {
              cin>>L.elem[i];
              L.length++;
       }
 
       ListInsert_Sq(L,2,'a');//插入
 
       for(i=0;i<L.length;i++)
       {
              cout<<L.elem[i]<<" ";
       }
       cout<<endl;
 
       char e;
       ListDelete_Sq(L,5,e);//删除
 
       for(i=0;i<L.length;i++)
       {
              cout<<L.elem[i]<<" ";
       }
       cout<<endl;
 
       cout<<LocateElem_Sq(L,'3')<<endl;//输出字符'3'在线性表的位置,该功能是顺序线性表的主要优点
}

 

标签:初始化,return,转化成,int,listsize,elem,char,算法,length
From: https://blog.51cto.com/u_5173797/7252049

相关文章

  • java中的图算法
    Java中有许多用于图算法的库和框架。下面是一些常见的图算法及其在Java中的实现方式:广度优先搜索(BFS):BFS用于在图中搜索最短路径。在Java中,可以使用LinkedList和HashSet来实现BFS算法。深度优先搜索(DFS):DFS用于在图中搜索路径或查找连通分量。在Java中,可以使用递归或栈来实现DFS算法......
  • 面对算法竞赛OI的Linux下vim简易配置
    这段配置基本通用但是需要vim支持clipboard才能复制到系统剪切板下面是配置正文.vimrcletmapleader="\<space>"vnoremap<leader>y"+yinoremapjk<ESC>nnoremap<leader>e<esc>:w<cr>:!g++%-o%<-fsanitize=undefined-Wall-g<c......
  • 「算法与数据结构」梳理6大排序算法 为了offer!
    6种排序如下......
  • 多元回归预测 | Matlab 蛇群算法优化随机森林(SO-RF)回归预测
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • [转]vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)
    1、vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)2、OpenMVS详细安装教程(ubuntu18.04)3、ubuntu18.04安装openMVS......
  • 【LeetCode回溯算法#12】二叉树的直径,树形dp的前置内容(使用dfs)
    二叉树的直径给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root。两节点之间路径的长度由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]或......
  • 最短路三种算法详解
    最短路最短路问题即,给你一张图,让你求出图中两点的最短距离。这篇文章会讲解\(Dijkstra\)、\(Spfa\)、\(Floyd\)三种算法,让您透彻理解最短路!Dijkstra朴素版题目:\(Dijkstra\)通常是用来解决图中一个定点到其余点的最短距离,基本思路是:从中心向外扩展,直到扩展到终点为止。......
  • zlmediakit源码学习(扩展支持算法分析)
    在zlmediakit源码基础上继续探索扩展支持算法分析功能。参照上一篇帖子:https://www.cnblogs.com/feixiang-energy/p/17623567.html算法模型使用opencv自带的人脸检测库:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xmlzlme......
  • 垃圾收集器ParNew&CMS与底层三色标记算法详解
    垃圾收集算法分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近9......
  • 社团算法学习笔记
    社团算法学习笔记:https://gaowenxin95.github.io/le_graph/社团社区发现算法学习笔记.html......