数据结结构学习 -- 线性表

简介:

1. 线性表的顺序表示指用一组地址连续的存储单元依次存取线性表的数据

线性表动态分配顺序存储结构

#define LIST_INIT_SIZE 100

#define LIST_INCREMENT 10

typedef struct

{

  ElemType* elem;

  int length;

  int listsize;
}SqList;

 

2。 线性表的链式存取结构的特点是用一组任意的存储单元存储线性表的数据(这组存储单元可以是连续的,也可以是不连续的)为了表达某个元素ai和其直接后继元素ai+1之间的

逻辑关系,对于数据ai除了存储其本身的信息外,还存储一个指向其后继元素的信息(即直接后继的位置)。这两部分信息组成数据元素ai的存储影像,成为节点。他包括两个域。

其中存储数据元素信息的域为数据域。存取直接后继位置的域为指针域,指针域存储的信息为指针或链。

-----线性表单链表存储结构------

typedef struct LNode {

ElemType data;

struct LNode * next;

}LNode, *LinkList;

LNode head;

if (head.next == NULL)  // 空表

 void CreateList ( LinkList & L,int n)

{

  L = (LinkList) malloc(sizeof(LNode));

  L->next = NULL ;  //先建立头结点

  for ( int i=0; i<n; i++) {

    p = (LinkList) malloc (sizeof(LNode));

    scanf(&p->data);

    p->next = L->next; //插入表头

    L->next = p;

  }

}

3.用一维数组描述线性链表

-----线性表静态链表存储结构------

#define MAXSIZE 1000

typdef struct {

ElemType data;

int cur;//游标(指示器)

}componet, SLinkList[MAXSIZE];

假设由终端输入集合元素,先建立表示集合A的静态链表S,而后输入集合B的元素的同时查找S表,弱存在B相同的元素,则从S删除之,否则将元素插入到S。

void InitSpace_SL(SLinkList ( & space )

{

  for(i=0 ; i<MAXSIZE; i++;) {

    space[i].cur = i+1;

  }

  space[MAXSIZE-1] = 0;

}

 

int Malloc_SL(SLinkList & space)

{

//若备用空间链表非空,则返回分配的节点下标,否则返回0.

  i = space[0].cur;

  if (space[0].cur) space[0].cur = space[i].cur;

  return i;

}

 

void Free_SL(SLinkList & space,int k)

{

//将K的空闲节点回收到备用链表。

  space[k].cur = space[0].cur;

   space[0].cur = k;

}

 

4. 循环链表是令一种形式的链式存储结构,他的特点是表中最后一个节点的指针指向头结点,整个链表形成一个环。由次,从表中任一个节点出发都能找到其他节点。

5。双向链表,有2个指针域,其中一个指向后继,另一个指向前驱。

-----线性表双向链表结构-----

typedef struct DulNode{

  ElemType data;

  struct DulNode * prior ;

  struct DulNode *next;

}DulNode,*DuLinkList;

 

 

-----带头结点的线性链表------

typedef struct LNode{

  ElemType data;

  struct LNode * next;

} * Link, *Position;

typdef struct {

  Link head,tail;

  int len;  //指示线性表中元素的个数

}LinkList;

 

应用 ,一元多项式的表示及相加

typedef struct {

  float coef;  // 系数

  int expn; //指数

} ElemType;

typedef LinkList polynomail;

基本操作的函数原型

void CreatePolyn(polynomail &p ,int m) ; //输入m项的系数和指数,建立一个一元多项式的有序链表P

void DestroyPolyn(polynomail &p);

void PrintPolyn(polynomail &p);

int PolynLength(polynomail &p);

void AddPolyn(polynomail &pa,polynomail &pb);

void SubtractPolyn(polynomail &pa,polynomail &pb);

void MultiPlyPolyn(polynomail &pa,polynomail &pb);

 

void CreatePolyn(polynomail &p ,int m){

  InitList(p); h= GetHead(p);

  e.coef = 0.0; e.expn = -1; SetCurElem(h,e); //设置头结点的数据元素

  for ( i =0; i<= m; i++) {

    scanf(e.coef,e.expn);

    if(!LocateElem(p,e,q,(*cmp)())){  //当前链表不存在该数据项

      if(MakeNode(s,e)) InsFirst(q,s);  //生成结点并插入链表

    }

   }

}

void AddPolyn(polynomail &pa,polynomail &pb) {

  ha = GetHead(pa); hb = GetHead(pb);

  qa = NextPos(pa,ha); qb = NextPos(pb,hb);

  while( qa && qb) {

    a = GetCurElem(qa); b = GetCurElem(qb);

    switch(*cmp(a,b)) {

      case -1:  // 多项式pa中当前结点的指数小

        ha = qa; qa = NextPos(pa,qa); break;

      case 0: //两者的指数相同

        sum = a.coef+b.coef;

        if (sum != 0.0) {

          SetCurElem(qa,sum}; ha = qa;}  // 修改多项式PA当前结点的系数值

        else { //删除多项式PA当前结点

          DelCurElem(qa,sum); ha = qa;

        }

        DelFirst(hb,qb); FreeNode(qb); qb = NextPos(pb,hb);

        qa = NextPos(pa,ha); break;

      case 1: //多项式PB当前结点的指数小

        DelFirst(hb,pb);  InsFirst(ha,qb);

        qb = NextPos(pb,hb); ha = NextPos( pa,ha); break;

     } //switch

  }//while

  if(!Empty(pb))  Append(pa,pb); // 链接pb中剩余的结点

  FreeNode(hb); //释放pb的头结点

}

 


本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/archive/2012/11/22/2783363.html,如需转载请自行联系原作者

相关文章
|
4月前
数据结构堆排序中堆的建立、调整、插入、删除等操作的详解(题目讲解 简单易懂)
数据结构堆排序中堆的建立、调整、插入、删除等操作的详解(题目讲解 简单易懂)
119 0
|
23天前
|
存储
【数据结构】【版本1.2】【线性时代】——链表之王(双向带头循环)
【数据结构】【版本1.2】【线性时代】——链表之王(双向带头循环)
|
4月前
|
存储
链表加法与节点交换:数据结构的基础技能
链表加法与节点交换:数据结构的基础技能
|
4月前
|
存储 算法
数据结构单链表之检测和删除链表中的循环 | 第十三套
数据结构单链表之检测和删除链表中的循环 | 第十三套
29 0
|
9月前
|
存储
模拟Trie树结构
模拟Trie树结构
33 0
|
存储 算法
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
169 0
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
|
11月前
|
存储 定位技术
我爱啃书--逻辑结构与物理结构(大话数据结构)
我爱啃书--逻辑结构与物理结构(大话数据结构)
54 0
|
11月前
|
存储 算法
我爱啃书--链表的特殊形式和总结(大话数据结构)
我爱啃书--链表的特殊形式和总结(大话数据结构)
65 0
|
11月前
|
存储 人工智能 算法
我爱啃书--单链表的整表创建删除和优点(大话数据结构)
我爱啃书--单链表的整表创建删除和优点(大话数据结构)
52 0
|
11月前
|
存储
大话数据结构--图的存储结构
大话数据结构--图的存储结构
54 0