首页 > 设备 > 经验 > 怎么回收链表所有节点,求各位大神帮我解决下问题代码关于静态链表的空闲结点

怎么回收链表所有节点,求各位大神帮我解决下问题代码关于静态链表的空闲结点

来源:整理 时间:2023-07-06 16:20:08 编辑:皮来回收 手机版

本文目录一览

1,求各位大神帮我解决下问题代码关于静态链表的空闲结点

这个静态链表就是用下标来模仿指针的功能的这段代码就是在可用链的链头插入回收的结点的,下标为0的结点是空闲结点链的头结点过程为当前结点指向头结点的后继,头结点再指向本结点,这样完成了链表的头插入
不明白啊 = =!

求各位大神帮我解决下问题代码关于静态链表的空闲结点

2,C语言数据结构算法215的结点回收是不是并非真的删除而是使空

你的理解是对的。这里的删除的意思相当于以下两个步骤:1、将下标为k的空闲结点从它所在的链表中断开取出。2、将下标为k的空闲结点插入到备用链表。
常用的算法按其功能分有:查找,排序,逆序,遍历,替换,删除等。每一种功能又有很多实现的方法。 http://wenku.baidu.com/view/d331d14533687e21af45a985.html

C语言数据结构算法215的结点回收是不是并非真的删除而是使空

3,释放单链表

按字面意思来看,估计是把单链表中的所有结点逐个删除,并回收其占用的内存空间。
链表和其他的数据结构不一样的地方就在于,它会占用内存,而且你用完之后,即使删除了某个节点,它也不会自己释放内存,必须用free函数来释放,就是free(*p),其中p是指向这个节点的指针,这个问题在java里面得到了解决,因为java里面带有一个自动的程序,就是垃圾清理器,它会定时在系统的内存中运行,遇到没用的内存就会释放掉,然后回收,在C#里面也不用担心释放的问题,不过释放不用的节点是编程的一个好习惯哟!
关于最后的头结点要不要释放根据严蔚敏的《数据结构(c语言版)》37页,对destroylist(linklist &l)的解释是:销毁线性链表l,l不再存在。我认为应该是要释放。参考代码如下: p=head->next; for(; p ;) q=p->next; free(p); p=q; } free(head);

释放单链表

4,c语言 定义一个函数删除链表结点

感觉你的链表写的很怪,,,,,链表的结点需要随机分配内存空间,但你没分配。。。。而且你链表头结点里的下个地址是0,然而你给后面几个结点里面的下个地址还是0.。。。。。感觉就在一个结点里面绕一样。。。。。所以你先网上看下具体的链表该怎么写。。。。
/*初始条件:顺序线性表l已存在,1≤i≤listlength(l) *//*操作结果:删除l的第i个数据元素,并用e返回其值,l的长度减1*/status listdelete(struct node *l, int i, int *e) int j; struct node *p, *q; p = l; j = 1; while (p->next && j < i) /*遍历寻找第i个元素*/ p = p->next; ++j; } if (!(p->next) || j > i) return error; /*第i个元素不存在*/ q = p->next; p->next = q->next; /*将q的后继赋值给p的后继*/ *e = q->data; /*将q结点中的数据给e*/ free(q); /*让系统回收此结点,释放内存*/ return ok;}

5,C语言编程写一个函数del删除动态链表中指定的结点

#include   #include   #include   typedef struct node //定义节点     int value;   struct node* next;   }note; note* head = NULL;  void del (note** head, int k)//删除链表     note* pp;   note* pt;   note* pq;   pp = *head;   if ((*head)->value == k)//如果头结点的值等于k,删除头结点      *head = (*head)->next;   return;   }   while(pp->value != k)      pt = pp;   pq = pp->next;   pp = pq;   } pt->next = pp->next;//删除结点  }  void insert(note** head, int q)//建立链表     note* pp;   note* pt;   note* p = (note*)malloc(sizeof(note));   p->value = q;   p->next = NULL;   pp = *head;   if (*head==NULL)      *head=p;   return;   }   while(pp->next!=NULL)      pt = pp->next;   pp = pt;   } pp->next = p;  }  void print(note* head)//打印链表     note* pp;   while(head!=NULL)      printf("%d ", head->value);   pp = head->next;   head = pp;   }  }  int main()     int i;   int n,k,value;   scanf("%d %d",&n, &k);   for(i=0; i      scanf("%d", &value);   insert(&head, value); //把head的地址传过去   }   del(&head, k);   print(head);   getch();//随意按个键退出界面   return 0; }
int main(int argc, char** argv) int dest[1024]; // 存储输入的数据 int result[1024]; // 存储最后的结果 这里只是简单的用数组,你完全可以自己写个list int ntotal = getc(); // getc函数不知道写的对不对,没有查看api int ndel = getc();/*获取用户输入的数据*/ int i = -1; while (++i dest[i] = getc(); /*判断是否等于ndel,如果不相等则放在result数组中*/ i = -1; int j = -1; while (i if (dest[i] != ndel) result[++j] = dest[i]; /*打印result数组,你自己打印吧*/ return 0;}
/*初始条件:顺序线性表l已存在,1≤i≤listlength(l) *//*操作结果:删除l的第i个数据元素,并用e返回其值,l的长度减1*/status listdelete(struct node *l, int i, int *e) int j; struct node *p, *q; p = l; j = 1; while (p->next && j < i) /*遍历寻找第i个元素*/ p = p->next; ++j; } if (!(p->next) || j > i) return error; /*第i个元素不存在*/ q = p->next; p->next = q->next; /*将q的后继赋值给p的后继*/ *e = q->data; /*将q结点中的数据给e*/ free(q); /*让系统回收此结点,释放内存*/ return ok;}

6,java清空链表

a.clear();//清空链表//没办法清空内存,Java中的内存清空是Java垃圾回收器来。程序猿没法控制的。。。
链表是一种重要的数据结构,在程序设计中占有很重要的地位。c语言和c++语言中是用指针来实现链表结构的,由于java语言不提供指针,所以有人认为在java语言中不能实现链表,其实不然,java语言比c和c++更容易实现链表结构。java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。 class node object data; node next;//指向下一个结点 } 将数据域定义成object类是因为object类是广义超类,任何类对象都可以给其赋值,增加了代码的通用性。为了使链表可以被访问还需要定义一个表头,表头必须包含指向第一个结点的指针和指向当前结点的指针。为了便于在链表尾部增加结点,还可以增加一指向链表尾部的指针,另外还可以用一个域来表示链表的大小,当调用者想得到链表的大小时,不必遍历整个链表。下图是这种链表的示意图: 链表的数据结构 我们可以用类list来实现链表结构,用变量head、tail、length、pointer来实现表头。存储当前结点的指针时有一定的技巧,pointer并非存储指向当前结点的指针,而是存储指向它的前趋结点的指针,当其值为null时表示当前结点是第一个结点。那么为什么要这样做呢?这是因为当删除当前结点后仍需保证剩下的结点构成链表,如果pointer指向当前结点,则会给操作带来很大困难。那么如何得到当前结点呢,我们定义了一个方法cursor(),返回值是指向当前结点的指针。类list还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作。例如reset()方法使第一个结点成为当前结点。insert(object d)方法在当前结点前插入一个结点,并使其成为当前结点。remove()方法删除当前结点同时返回其内容,并使其后继结点成为当前结点,如果删除的是最后一个结点,则第一个结点变为当前结点。 链表类list的源代码如下: import java.io.*; public class list /*用变量来实现表头*/ private node head=null; private node tail=null; private node pointer=null; private int length=0; public void deleteall() /*清空整个链表*/ head=null; tail=null; pointer=null; length=0; } public void reset() /*链表复位,使第一个结点成为当前结点*/ pointer=null; } public boolean isempty() /*判断链表是否为空*/ return(length==0); } public boolean isend() /*判断当前结点是否为最后一个结点*/ if(length==0) throw new java.lang.nullpointerexception(); else if(length==1) return true; else return(cursor()==tail); } public object nextnode() /*返回当前结点的下一个结点的值,并使其成为当前结点*/ if(length==1) throw new java.util.nosuchelementexception(); else if(length==0) throw new java.lang.nullpointerexception(); else node temp=cursor(); pointer=temp; if(temp!=tail) return(temp.next.data); else throw new java.util.nosuchelementexception(); } } public object currentnode() /*返回当前结点的值*/ node temp=cursor(); return temp.data; } public void insert(object d) /*在当前结点前插入一个结点,并使其成为当前结点*/ node e=new node(d); if(length==0) tail=e; head=e; } else node temp=cursor(); e.next=temp; if(pointer==null) head=e; else pointer.next=e; } length++; } public int size() /*返回链表的大小*/ return (length); } public object remove() /*将当前结点移出链表,下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点*/ object temp; if(length==0) throw new java.util.nosuchelementexception(); else if(length==1) temp=head.data; deleteall(); } else node cur=cursor(); temp=cur.data; if(cur==head) head=cur.next; else if(cur==tail) pointer.next=null; tail=pointer; reset(); } else pointer.next=cur.next; length--; } return temp; } private node cursor() /*返回当前结点的指针*/ if(head==null) throw new java.lang.nullpointerexception(); else if(pointer==null) return head; else return pointer.next; } public static void main(string[] args) /*链表的简单应用举例*/ list a=new list (); for(int i=1;i<=10;i++) a.insert(new integer(i)); system.out.println(a.currentnode()); while(!a.isend()) system.out.println(a.nextnode()); a.reset(); while(!a.isend()) a.remove(); } a.remove(); a.reset(); if(a.isempty()) system.out.println("there is no node in list \n"); system.in.println("you can press return to quit\n"); try system.in.read(); //确保用户看清程序运行结果 } catch(ioexception e) } } class node /*构成链表的结点定义*/ object data; node next; node(object d) data=d; next=null; } } 读者还可以根据实际需要定义新的方法来对链表进行操作。双向链表可以用类似的方法实现只是结点的类增加了一个指向前趋结点的指针。 可以用这样的代码来实现: class node object data; node next; node previous; node(object d) data=d; next=null; previous=null; } } 当然,双向链表基本操作的实现略有不同。链表和双向链表的实现方法,也可以用在堆栈和队列的实现中,这里就不再多写了,有兴趣的读者可以将list类的代码稍加改动即可。 如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!vaela
文章TAG:怎么回收链表所有怎么回收链表所有节点

最近更新

  • 回收黄金的广告宣传语,求中国黄金的广告语急回收黄金的广告宣传语,求中国黄金的广告语急

    求中国黄金的广告语急做黄金,找我哇!2,谁帮我设计一下关于黄金的宣传标语要经典点的今年过节不收礼、收礼只收大黄金、我。。知。。道加。。我。。私。。聊3,一家黄金交易所的广告语急急急.....

    经验 日期:2024-03-15

  • 加盟足疗店,足疗加盟需要多少钱加盟足疗店,足疗加盟需要多少钱

    足疗加盟需要多少钱这个要看你做的是什么样的规模,像那种小店,几万元就够了,花费最多的就是人员工资了加盟的都是外行你去问问开过足疗的人你去找几个足疗店管理人员问问不要浪费钱了2,足.....

    经验 日期:2024-03-08

  • 附近收铜价格,铜的回收价格是多少附近收铜价格,铜的回收价格是多少

    铜的回收价格是多少2,铜回收多少钱1斤3,黄铜回收价是多少4,废铜回收价格多少钱一斤5,有谁知道废铜回收多少钱一斤6,废铜价格多少钱一斤1,铜的回收价格是多少现在大约在28一斤,还有上涨的事态.....

    经验 日期:2024-03-08

  • 哪些平台回收手表可靠,名表回收选择哪里最好的啊知道的说下哪些平台回收手表可靠,名表回收选择哪里最好的啊知道的说下

    名表回收选择哪里最好的啊知道的说下名表回收选择哪里最好来找我就找对人了哈。,我知道2,名表回收哪里好名表维修的话,一般典当行比较好,但是你要回说价,才有可能卖个好价格。希望我的回答.....

    经验 日期:2024-03-08

  • 武汉二手家具家电回收,武汉市江夏区哪里有旧家具回收市场武汉二手家具家电回收,武汉市江夏区哪里有旧家具回收市场

    武汉市江夏区哪里有旧家具回收市场我不会~~~但还是要微笑~~~:)丰庆路旧家具市场处理。2,武汉哪里有旧家具回收的汉口唐蔡路、三眼桥路一带比较集中。丰庆路的旧家具市场啊都是在那里处理.....

    经验 日期:2024-03-08

  • 58同城二手买卖,58同城的二手交易可信么58同城二手买卖,58同城的二手交易可信么

    58同城的二手交易可信么不可全信不清楚,反正我买东西都是到淘宝,而且还去天猫的商铺……你去搜搜看,有没有你的二手货2,五八同城二手物品怎么找登录同城,首页二手物品,点去进入选择品种挺多.....

    经验 日期:2024-03-08

  • 成都酒水回收电话,成都市青石桥的食人鱼最便宜多少钱成都酒水回收电话,成都市青石桥的食人鱼最便宜多少钱

    成都市青石桥的食人鱼最便宜多少钱65一条120一对2,成都土鸡批发价格是多少5.5----6块、斤3,请问成都市哪里有生日当天免费或打折餐春熙路那家绿满家就是哈。免费你个人的4,走头无路找成都.....

    经验 日期:2024-03-08

  • 哈尔滨垃圾桶厂家直销,哈尔滨哪里有生产塑料桶的15L以上的哈尔滨垃圾桶厂家直销,哈尔滨哪里有生产塑料桶的15L以上的

    哈尔滨哪里有生产塑料桶的15L以上的锦州市华美宝业包装制品有限公司2,哈尔滨哪里有卖大垃圾桶你想要多大就有多大去透笼或者曼哈顿都有3,谁知道哈尔滨那里有卖果皮箱的就是路边的那种大.....

    经验 日期:2024-03-08