嵌入式 线性表(顺序表,链表)示例

原创 2013年12月02日 14:58:12

除第一个元素外,其他每一个元素有一个且仅有一个直接前驱;

除最后一个元素外其他每一个元素有一个且仅有一个直接后继。

这就是线性表的基本特征了。

那顺序表和链表有是什么呢?

顺序表和链表都是线性表。

首先说下顺序表:其实很简单,就是像数组一样,数据存放在连续的存储空间中。

用数组就能很方便的实现这种结构。

所以,因为储存结构的顺序与逻辑结构的顺序完全一致,其最大优点就是可以方便地随机存取表中任一个结点。

就像数组可以直接用下表来对数组进行操作。

但是,这一个又有一个很大的缺点:既然储存结构的顺序与逻辑结构的顺序完全一致,那么,当我们想在中间插入或者在中间删除一个数据的时候,我们就要将该位置以后的所有数据都向后移,或者向前移。效率就有点低了吧。还有一个问题:当我们定义一个数组的什么时候,比如:intstr[N];N是一个给定的数,也就是说,我要给他分配一块固定的空间,那么,当我们不知道要多少空间的时候,我们有可能会让费空间,或者空间不够用。

这样就要说到链表了,它是线性表的链接存储表示可不连续地分布在内存中任何的位置。

链表(单链表,双链表,(循环,带头))

我这篇博客就说说单链表了~~~~~

1.单链表结点:

  1. <spanstyle="font-size:18px;">typedefintNodeData;
  2. typedef structnode
  3. {
  4. NodeData data;
  5. struct node*next;
  6. }NODE;</span>
typedef int NodeData;

typedef struct node
{
    NodeData data;
    struct node *next;
}NODE;


本来不打算说的,后来想想,还是写上去,只想推荐使用typedef

2.单链表的create,insert,remove,sort都不说了

3.我只想说下单链表的转置(很多公司面试题都会问这个):

  1. <spanstyle="font-size:18px;">NODE * myreverse(NODE*head)
  2. {
  3. if(head == NULL||head->next == NULL)
  4. {
  5. returnhead;
  6. }
  7. else
  8. {
  9. NODE *front = NULL;
  10. NODE *q = head;
  11. while(q !=NULL)
  12. {
  13. NODE *ne = NULL;
  14. ne = q->next;
  15. q->next = front;
  16. front = q;
  17. q = ne;
  18. }
  19. returnfront;
  20. }
  21. }</span>
NODE * myreverse(NODE *head)
{
    if(head == NULL ||head->next == NULL)
    {
        return head;
    }
    else
    {
        NODE *front = NULL;
        NODE *q = head;
        while(q != NULL)
        {
            NODE *ne = NULL;
            ne = q->next;              
            q->next = front;           
            front = q;                 
            q = ne;                    
        }
    return front;
    }
}

这个应该还是很重要的,能完全熟练掌控最好,不能的话就背下来呗,反正也不长。

最后,还是 多画画图,对学数据结构太有用了。

相关文章推荐

嵌入式 select用于实现I/O多路复用示例

阻塞和非阻塞   阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读 操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:58
  • 497

嵌入式 寄存器某一位置位或清零

应用一:将寄存器中的某一位置1或则清0,保持其他位不变。 int l_data; void SetBit(int pos)//将某一位置位的操作 { if((pos >= 0) && (pos ...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:55
  • 1054

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

一,线性表顺序存储 #include #include #include #include #include #include #include #define ...
  • acm_hmj
  • acm_hmj
  • 2016年04月07日 17:50
  • 1185

必不可少需要掌握的嵌入式知识(3)-- 经典数据结构总结之(线性表,树,图)

线性表:允许在序列任意位置操作,线性表的操作位置不受限制,线性表的操作十分灵活,常用操作包括在任意位置的插入和删除,以及查询,修改任意位置的元素。一般包括单链表,双向链表,循环链表和双向循环链表 。单...

线性表的顺序和链式实现方式

  • 2013年10月21日 22:12
  • 3KB
  • 下载

线性表 之 顺序表 和 链表

线性表: 线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。    线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,...

线性表(顺序表,链表的表示和实现)

本篇文章将从以下几点进行讲解:  1.线性表的类型定义  2.1线性表的顺序表示和实现  2.2线性表的链式表示和实现 1.线性表的类型定义: 接下来介绍下什么是线性表,学习每一样东...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 线性表(顺序表,链表)示例
举报原因:
原因补充:

(最多只允许输入30个字)