【第22期】观点:IT 行业加班,到底有没有价值?

算法基础之链表

原创 2017年01月03日 21:41:36

一、 抽象数据类型(ADT

ADT是一些操作的集合,不涉及如何实现操作的集合,可以看作是模块化设计的扩充。

这些操作的实现只在程序中编写一次,而程序中任何其他部分需要在该ADT上运行其中的一种操作时可以通过调用适当的函数来进行

 

二、链表的一些操作

1.测试链表是否为空链表

int Isempty(List l){
    return l->next=NULL;
}


2.测试当前位置是否是链表的末尾函数

int Islast(Position p,List l){
     return p->next=NULL;
}


3.查找元素所在位置

Position Find(ElementType x,List l){
      Position p;
      p=l->next;
      while(p!=NULL && p->element!=x)
             p=p->next;
       return p;
}


4.删除元素

void Delete(ElementType x,List l){
      Position p,temp;
      p=FindPrevious(x,l);
      if(!IsLast(p,l))
     {
          temp=p->next;
          p->next=temp->next;
          free(temp);
     }
}

Position FindPrevios(ElementType x,List l){ //找到对应元素的前驱
      Position p=l;
      while(p->next!=NULL && p->next->element!=x)
      {
              p=p->next;
      }
       return p;
}


5.插入

void Insert(ElementType x,List l,Position p){
       Position temp;
       temp=(Position)malloc(sizeof(Position));
       if(temp == NULL)
       FatalError(“out of space!! ”);
       temp->element=x;
       if(p->next!=NULL)
      {
            temp->next=p->next;
            p->next=temp;
      }
      else
     {
           p->next=temp;
           temp->next=NULL;
     }
}


6.删除链表(利用临时指针存储下一个元素,防止释放当前元素后找不到下一个元素)

void DelectList(List l){
      Position p,temp;
      p=l->next;
while(p!=NULL)
{
      temp=p->next;
      free(p);
      p=temp;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

《C++语言基础》实践项目——链表类及其应用

返回:贺老师课程教学链接【项目 - 链表类】动态链表也是程序设计中的一种非常有用的数据结构。可以说,是否能够理解有关操作的原理,决定了你是否有资格称为“科班”出身。在后续的专业基础课中,相关的内容还会...

链表合并算法

题目 已知两个有序链表,试合并这两个链表,使得合并后的链表仍然有序(注:这两个链表没有公共结点,即不交叉)。 分析 既然两个链表都是有序的,所以合并它们跟合并两个有序数组没有多少区别,只是链表操作涉及到指针,不能大意。 方法一:非递归方法 使用2个指针list1和list2分别遍历两个...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

数据结构基础(8) --单链表的设计与实现(1)之基本操作

链表简介 数组的缺点:      1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O...

数据结构和算法设计专题之---单链表的逆序

下面来看一下很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个...

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求【项目 - 链表类】动态链表也是程序设计中的一种非常有用的数据结构。可以说,是否能够理解有关操作的原理,决定了你是否有资格称为“科班”出身。在后续的专业基础课中,相...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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