在C和c++中如何使用线性表

  介绍

本篇文章给大家分享的是有关在C和c++中如何使用线性表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言

线性表包括两部分顺序表和链表,是数据结构的基础,在此主要就算法进行分析和总结,作为记忆了解,未做具体实现。

提示:以下是本篇文章正文内容、下面案例可供参考

一、顺序表

 # define LISST_INIT_SIZE 100
  #定义LISTINCREMENT 10
  #定义好的0
  #定义溢出1
  typedef int ElemType;
  typedef int地位;

1,定义

 typedef struct {
  int * elem;//定义存储基地址
  int长度;//当前顺序表长度
  int listsize;//当前分配的大小
  }SqList; 

2,初始化构建

状态InitList_Sq (SqList, l) {
  lelem=(ElemType *) malloc (LISST_INIT_SIZE * sizeof (ElemType));
  如果(! L.elem)
  退出(溢出);
  L.length=0;
  L.listsize=LISST_INIT_SIZE;
  返回OK; 

3,插入操作

在第我的位置插入元素e

1,算法解释
    <李>检查我的合法性李 <李>检查储存空间李 <李>标记插入位置李 <>李将插入位置后面的元素依次向下移动一位(注意从后往前依次移动,以移动位置小于插入位置结束循环)
      李,
2,算法实现
状态LIstInsert_Sq (Sqlist, L, int i, ElemType e) {
  SqList * newbase * p *问;//在我第个位子插入元素e
  如果(i<1 | | i> L.length + 1)
  返回错误;//分配存储空间
  如果(L.length> L.listsize) {
  newbase=(ElemType *) realloc (l。elem (Listsize + LISTINCREMENT) * sizeof (ELemType);
  如果(! newbase)
  退出(溢出);
  L.elem=newbase;
  L.listsize +=LISTINCREMENT;
  }//记录插入位置
  q=, L.elem(张);
  (p=L.elem[长度是1];q<=p, p——)
  {
  * (p + 1)=* p
  }
  * p=e;
  L.length + +,//更新表长
  还好;
  }

4,删除操作

在第我的位置插入元素e

1,算法解释
    <李>检查我的合法性李 <>李记录删除的位子李 <>李找到删除元素并赋值给e <李>被删除元素后面的元素都想上移动一位(找到表尾元素,以移动位子地址大于表尾地址结束循环)
      李,
2,算法实现
状态LIstDelete_Sq (Sqlist, L, int i, ElemType, e) {
  SqList * p *问;//在我第个位子删除元素
  如果(i<1 | | i> L.length + 1)
  返回错误;//记录删除位置
  p=, L.elem(张);
  e=* p;//表尾元素
  q=, L.elem [L.length-1];
  (+ + p;术中;=问;p + +)
  {
  * (p - 1)=* p;
  }
  L.length——;//更新表长
  还好;
  }

5,合并操作

已知拉和磅的元素按照非递减的顺序排列归并为Lc也为按值非递减排列

1,算法解释
    <李>记录,磅的操作地址李 <>李计算Lc的长度并为其分配空间李 <>李记录,磅的表尾位置李 <>李合并——比较两个表的元素,值较小的存入Lc(注意:以任意一表完全存入Lc结束循环) <李>检查,磅是否还有剩余元素,如果有剩余依次存入Lc
      李,
2,算法实现
空白MergeList_Sq (SqList La SqList磅,SqList, Lc) {//分别记录,磅的当前操作地址
  SqList *, * pb, * pc, * pa_last, * pb_last;
  pa=La.elem;
  pb=Lb.elem;
  Lc.listsize=La.length + Lb.length;
  电脑=Lc。elem=(ElemType *) mallod (Lc.listsize * sizeof (ElemType);
  如果(pc) {
  退出(溢出);//分配失败
  }//记录顺序表尾的地址
  pa_last=La.elem + La.length-1;
  pb_last=Lb.elem + Lb.length-1;
  而(pa 

二,链表

 #定义好的0
  #定义溢出1
  typedef int ElemType;
  typedef int地位;

1。单链表

1,定义
 typedef int ElemType;
  typedef struct LNode {
  ElemType日期;
  struct LNode *下;
  }LNode * LinkList; 
2,插入

在带头结点L中的第i个位置之前插入e

在C和c++中如何使用线性表