链表
哦吼~
心如欲壑,厚土难填。
展开
-
两两交换链表中的结点(c语言)
两两交换链表中的结点例:1->2->3->4->NULLout:// 2->1->4->3->NULL/*我的思想是:让指针p先指向head,然后确定head(头),因为第一次交换肯定是head和head->next,所以head原创 2019-03-04 19:34:57 · 1562 阅读 · 0 评论 -
判断两个链表是否相交
//不考虑带环的情况//1.0将他们长度统一,判断是否有公共结点 ElemSN *TheSameNode(ElemSN *head1,ElemSN *head2) { int cnt=0;//累加器,计算相差多少个结点 ElemSN *p=head1,*q=head2,*t;//无论第一个链表长还是第二个链表,都当作第一个长 for(t=head1;t;cnt++,t=t-&...原创 2019-03-23 21:28:45 · 161 阅读 · 0 评论 -
长短指针的应用
//长短指针解决链表中间问题//设head指向一个非空单向链表,返回链表中间结点地址//若有偶数个结点,返回前半段的尾结点//1.0ElemSN *Middle(ElemSN *h){ ElemSN *p,*q; int cnt=0,i; for(p=h;p;cnt++,p=p->next);//算出是奇数个结点还是偶数个结点 for(p=h,i=0;i<(cnt/2...原创 2019-03-31 14:31:53 · 525 阅读 · 0 评论 -
将两条升序链表合成一条升序链
//将两个升序链合成为一条,即同时跑两根链表,遇到小值,指针p指上去,然后处理当前结点,尾插到新的链表中#include<stdio.h>#include<stdlib.h>#define N 5typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Creatlink(int a[]...原创 2019-03-27 22:54:16 · 379 阅读 · 0 评论 -
带表头结点的创建
//先创建一个数据域值为空,指针域指向空的结点,作为头结点//然后遍历数组读取数据建立结点,尾插或者头插结点,建链#include<stdio.h>#include<stdlib.h>#define N 5 typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *createlink...原创 2019-03-27 23:13:18 · 673 阅读 · 0 评论 -
单向循环链表的创建与输出
//单向循环链表即为无头无尾//①尾结点的指针域指向头结点//②设置一个尾指针更加高效//③在插入和删除算法上要遵守单向链表的特点//创建单向循环链表ElemSN *Createlink(int a[]){ ElemSN *h,*t,*p; h=NULL; for(int i=0;i<N;i++){//为新结点分配单元 p=(ElemSN *)malloc(sizeof...原创 2019-04-01 23:51:48 · 1045 阅读 · 0 评论 -
单向循环链表的删除算法
//单向循环链表在删除时必须要有前驱指针,删头时,头指针前驱是尾结点//删除时,需要两指针联动//t为尾指针//删头时for(t=h;t->next!=h;t=t->next);t->next=h->next;free(h);h=t->next;//删中间尾时,q为前驱指针q->next=delp->next;free(delp);...原创 2019-04-02 00:12:30 · 3142 阅读 · 0 评论 -
带表头结点的删除算法
//带表头结点的链表插入和删除不用考虑有无前驱指针//设数据域值不重复,删除值为key的结点void Delkeynode(ElemSN *h,int key){ ElemSN *p,*del; for(p=h;p->next&&p->next->data!=key;p=p->next); if(!p->next){ printf(...原创 2019-03-28 22:32:54 · 740 阅读 · 0 评论 -
带表头结点链表的移动,插入操作
//设head指向一个非空带表头结点的单向链表,将该单向链表就地逆置//类似于不带头结点的链表逆置//1.0void Sortlink(ElemSN *h){ ElemSN *p,*h1=NULL,*tail; while(h->next){ p=h->next;//p指向第一个结点 h->next=p->next;//挂链 p->next=h...原创 2019-03-28 22:56:17 · 478 阅读 · 0 评论 -
设head1和head2分别指向两个带表头结点的升序链表,将两个升序链表合并成一个升序链表并去重复值
#include<stdio.h>#include<stdlib.h>#define N 5#include"toulianbiao.h"//与前文的“lianbiao.h”类似,此处为带表头结点的链表void Delkeynode(ElemSN *head1,ElemSN *head2){ ElemSN *p,*tail,*h1=NULL,*s; while...原创 2019-03-28 22:58:24 · 1057 阅读 · 0 评论 -
静态链表
//本文转载解学武的文章代码!//本人又在此加以说明:静态链表即用一维数组来实现链表的功能,同时也丧失了一维数组的一些特点//逻辑上将整个数组划分为两部分,一部分为备用链表,一部分为现有链表//删除操作是将删除元素的那部分节点链接到备用链表//而插入操作则是在备用链表中取出一个节点,赋值并插入到现有结点后面实现此操作的 C 语言代码如下:#include <stdio.h>...转载 2019-04-11 23:20:10 · 124 阅读 · 0 评论 -
单向循环链表实现约瑟夫环
//1.0#include<stdio.h>#include<stdlib.h>#define N 10typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Createlink(int a[]){ ElemSN *h,*t,*p; h=NULL; for(int i=0;i...原创 2019-04-02 22:14:37 · 1833 阅读 · 0 评论 -
插入排序(数组&&链表)
//思想:将数组分为有序和无序两部分//有序:a[0]//无序:a[1]~a[n-1]//遍历无序区间的所有元素,每次取出无序区间的第一个元素,a[i]//和有序区间的元素进行比较,将a[i]插入到有序区间的合适位置#include<bits/stdc++.h>#define N 8void InsertSort(int a[]){ int i,j,x; for(i...原创 2019-04-15 22:58:08 · 569 阅读 · 0 评论 -
链表的递归
//设head指向一个非空单向链表(其数据域值均为正整数)//输出链表所有结点数据域的值#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node*next;}ElemSN;ElemSN *Createlink(int a[],int n){ ElemSN *...原创 2019-04-10 00:31:26 · 234 阅读 · 0 评论 -
设head指向一个非空单向链表,逆向输出所有结点数据域的值
//设置岗哨的方法#include<stdio.h>#include<stdlib.h>#define SIZE 10typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Createlink(int a[]){ ElemSN *h=NULL,*np; for(int i=SI...原创 2019-03-23 20:03:49 · 450 阅读 · 0 评论 -
设head指向一个数据域值升序有序的非空单向链表,将关键字为key的结点插入,使原链表依然有序
#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *period; struct node *next;}ElemSN;ElemSN *Createlink(int *Data,int n){ ElemSN *np,*head=NULL,*tail;...原创 2019-04-04 00:11:34 · 191 阅读 · 0 评论 -
链表结点删除-----删除重复值结点
//设数据域的值重复且升序有序,删除链表中的重复值结点//例:{1,1,2,2,3,3,4,4,5,5}//out:1,2,3,4,5//头结点是肯定不会被删除的,删除的只有中间尾//遍历链表,如果遇到重复值,则删除,并且指针p应紧接着后移继续判断,挂链删除即可#include<stdio.h>#include<stdlib.h>#define N 10ty...原创 2019-03-22 23:54:45 · 167 阅读 · 0 评论 -
通过整型无序含重复值的数组Data创建一个无重复值的单向链表
//设有数据集合Data,其值均为整型,Data无序且含有重复值//要求:通过Data的值创建一个无重复值的单向链表//例:{2,3,2,5,8,2,8,3,5,8};//out:2->3->5->8->NULL#include<stdio.h>#include<stdlib.h>#define N 10typedef struct n...原创 2019-03-10 17:34:39 · 305 阅读 · 0 评论 -
通过数组集合Data的值创建一个升序单向链表
//设有数据集合Data,其值均为整型,Data无序且含有重复值//要求:通过Data的值创建一个(不考虑含重复值)的升序单向链表//例:Data={3,2,2,8,4,7,6,9}//out:2,2,3,4,6,7,8,9#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#define N 8typedef struct node{ i...原创 2019-03-10 21:06:04 · 173 阅读 · 0 评论 -
单向链表的遍历
/链表的遍历和数组类似,就是跑链表///输出单向链表尾结点的值#include<stdio.h>#include<stdlib.h>#define N 5typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Creatlink(int a[]){ ElemSN *h,*tail...原创 2019-03-19 20:46:12 · 1164 阅读 · 0 评论 -
链表结点的查找
//链表结点的查找(无重复值)//在一个非空单向链表中(数据域值不重复)查找值为key的元素,返回地址,输出值#include<stdio.h>#include<stdlib.h>#define N 6#include"lianbiao.h"ElemSN *Findkey(ElemSN *h,int key){ //查找与key相同的结点 ElemSN...原创 2019-03-19 21:02:23 · 677 阅读 · 0 评论 -
双向链表的创建
#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *period; struct node *next;}ElemSN;ElemSN *Createlink(int *Data,int n){ ElemSN *np,*head=NULL,*tail;...原创 2019-03-16 19:12:36 · 283 阅读 · 0 评论 -
有一个双向链表,其值不重复,删除关键字为key的结点
#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *period; struct node *next;}ElemSN;ElemSN *Createlink(int *Data,int n){ ElemSN *np,*head=NULL,*tail;...原创 2019-03-16 19:41:39 · 250 阅读 · 0 评论 -
单向链表的创建
/链表的建立,就相当于一个结点不断尾插/头插的过程///1.0正向建链#include<stdio.h>#include<stdlib.h>#define N 5typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *creatlink(int a[]){ ElemSN *h,*...原创 2019-03-17 20:34:01 · 799 阅读 · 0 评论 -
链表结点的移动----逆向建链
//逆向建立链表 ,相当于一个不断头插结点的过程,因为每次头插,//数组中的元素相当于每次都要被插入到前面,因此要逆向遍历数组存值#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Createlink(int...原创 2019-03-24 22:34:22 · 289 阅读 · 0 评论 -
逆置单向链表(头插法)
//逆置单向链表//需要一个新的头指针充当当前正向新链表尾指针,初值赋NULL//挂链,移动指针,使其在原链表上跑起来#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Createlink(int *a,i...原创 2019-03-24 23:00:40 · 366 阅读 · 0 评论 -
链表结点的删除---删除值为key的结点
//设head指向一个非空单向链表,其数据域的值不重复,在链表中删除关键字值为key的结点//思想:跑链表,找到停下,做删除操作;//其中删除操作分为头结点删除和中间尾结点删除//头结点要注意移头,中间尾结点要注意挂链//1.0#include<stdio.h>#include<stdlib.h>#define N 6typedef struct odd{...原创 2019-03-21 20:30:47 · 1518 阅读 · 0 评论 -
链表结点的删除----删除最大值结点及无前驱指针删除结点
//设一个指针p指向了链表中的一个结点,删除这个指针所指的结点//这里采用了类似狸猫换太子的方法,以结点中的值为主,将待删结点的值与其后面的结点的值交换,//然后后面的结点就有了前驱指针,就可以删除了void Delthekey(ElemSN *p){ ElemSN *q; int t; t=p->data; p->data=p->next->data;...原创 2019-03-21 23:46:19 · 961 阅读 · 0 评论 -
设head指向一个单向链表将其数据域中所有值为奇数的结点放在前面
//1.0 将奇数链和偶数链先拆分出来,然后合并#include<stdio.h>#include<stdlib.h>#define N 8 typedef struct node{ int data; struct node *next;}ElemSN;ElemSN *Createlink(int a[]){ ElemSN *h=NULL,*np;...原创 2019-03-25 20:45:16 · 1115 阅读 · 0 评论 -
选择排序法(链表)&(数组)
//数组实现#include<stdio.h>#include<stdlib.h>#define N 8void Sortarray(int *a){ int i,j,k,t; for(i=0;i<N-1;i++){ k=i; for(j=k+1;j<N;j++){ if(a[k]>a[j]){//找到最小元素的下标 k...原创 2019-03-25 23:45:07 · 388 阅读 · 0 评论 -
一元多项式相加(递增)
//一元多项式的相加//①判断指数是否相等,相等则系数相加指数不变//②指数不相等的话,判断哪一个小,把小的链挂上,小的结点就被连上//③重复此过程知道某一方完//④将另外一方未完的链挂上#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ int d...原创 2019-04-14 11:56:05 · 447 阅读 · 0 评论