精华内容
下载资源
问答
  • 那么每个铁环就可以叫做一个节点,如果我们再每个铁环上面系上两个个小盒子,那么这两个小盒子一个叫做数据域就是存放每个节点数据的地方一个叫做指针域这个就是存放下一个节点(铁环)地址的地方。可能这样说还...

    首先我们来了解一下什么是链表?
    通俗的来说链表就是一种链式存储结构,大家可以抽象理解一下把他想象成一个铁链,铁链不是由一个个铁环,环环相扣组成的嘛!那么每个铁环就可以叫做一个节点,如果我们再在每个铁环上面系上两个个小盒子,那么这两个小盒子一个叫做数据域就是存放每个节点数据的地方一个叫做指针域这个就是存放下一个节点铁环)地址的地方。可能这样说还有点抽象,直接上图。
    在44444这里插入图片描述
    这就是链表里面一个节点的样子,下面我们给多个节点串起来形成链表!
    在这里插入图片描述
    我给每个节点的地址设为A,B,C。注意看第一个节点的指针域存放的是第二个节点的地址B,第二个节点的指针域存放的是第三个节点的地址。这样就把每个节点就穿一起咯,这就是最简单的链表,单链表。
    下面我们看一下代码实现
    先看一个节点的表示:

    typedef struct lianbiao
    {
            int date;//数据域
            struct lianbiao *pnext;//地址域
    }link;
    

    然后我们要做的就是像铁环一样给串起来,上代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct lianbiao
    {
            int date;
            struct lianbiao *pnext;
    }link;
    link *pnew;//新节点
    link *phead;//头节点
    link *ptemp;//临时节点
    int count=1;
    void creat(void);
    void add(void);
    int main()
    {
        int n,i;
        printf("请输入所需要创建的链表长度,不可为0\n");
        scanf("%d", &n);
        creat();
        for(i=0;i<n-1;i++)
        {
            add();
        }
      printf("链表创建完毕,输出链表所有数据\n");
    
      //printf("%d ", phead->date);
      for(ptemp=phead;ptemp!=NULL;ptemp=ptemp->pnext)
       {
           printf("%d ", ptemp->date);
       }
       return 0;
    }
    void creat(void)//创建头节点
    {
        phead=(link*)malloc(sizeof(link));
        phead->pnext=NULL;
        phead->date=0;
        //memset(link,0,sizeof(link));
    }
    void add(void)//添加节点
    {
        pnew=(link*)malloc(sizeof(link));
        pnew->date=count;
        pnew->pnext=0;
        ptemp=phead;
        while(ptemp->pnext!=NULL)
        {
            ptemp=ptemp->pnext;
        }
        ptemp->pnext=pnew;
        //pnew=NULL;
        count++;
    }
    
    

    运行结果:
    在这里插入图片描述
    如有问题可以在评论区或者私信我!感谢评阅,欢迎指正交流。
    链表基础2(超简单)–单链表的插入和删除
    链表基础3(超简单)–单链表的逆序

    展开全文
  • #include <iostream> using namespace std; typedef int ElemType; typedef struct LNode { ElemType data; //结点的数据域 struct LNode *next; //结点的指针域 }LNode,*LinkList; //LinkList...
    #include <iostream>
    using namespace std;
    
    typedef int ElemType;
    typedef struct LNode
    {
        ElemType data;        //结点的数据域
        struct LNode *next;   //结点的指针域
    }LNode,*LinkList;         //LinkList为指向结构体LNode的指针类型
    
    //创建单链表前插法
    void CreateList(LinkList &L,int n)
    {
        L = new LNode;
        L->next = NULL;
        cout << "请输入列表中元素:";
    
        for(int i=0;i<n;i++)
        {
            LNode *p;
            p = new LNode;     //生成新结点
            cin >> p->data;    //输入元素赋给新结点的数据域
            p->next = L->next;
            L->next = p;       //将新结点插入到头结点之后
        }
    }
    
    //求最大值
    void MaxElem(LinkList &L)
    {
        LNode *p = L->next;
        int maxElem = p->data;
    
        while(p != NULL)
        {
            if(p->data > maxElem)
                maxElem = p->data;
            p = p->next;
        }
        cout << "最大结点为:" << maxElem << endl;
    }
    
    int main()
    {
        int n;
        LNode *L;
        cout << "请输入链表的长度:";
        cin >> n;
    
        CreateList(L,n);
        MaxElem(L);
    
        return 0;
    }
    
    
    展开全文
  • 计算单链表长度计算单链表长度,实现单链表的打印 实现单链表的建立 ...//下一个节点 } 创建单链表 node *Create() { int i=0;//链表中数据个数 node *head,*p,*q; int x=0; head=(...
    计算单链表的长度 计算单链表的长度,实现单链表的打印
    实现单链表的建立
    链表节点的定义:
    typedef struct node
    {
    int data;//节点内容
    node *next;//下一个节点
    }
    创建单链表
    node *Create()
    {
    int i=0;//链表中数据个数
    node *head,*p,*q;
    int x=0;
    head=(node*)malloc(sizeof(node));//创建头结点
    while(1)
    {
    printf("input the data:");
    scanf("%d",&x);
    if(x==0)
    break;//Data为0时创建结束
    p=(node*)malloc(sizeof(node));
    p->data=x;
    if(++i==1)
    {
    head->next=p;//连接到head的后面
    }
    else
    {
    q->next=p;//连接到链表尾端
    }
    q=p;
    q->next=NULL;//链表的最后一个指针为NULL
    return head;
    }
    }
                                                      
    编程实现单链表的测长:
    返回单链表的长度
    int length(node *head)
    {
    int len=0;
    node *p;
    p=head->next;
    while(p!=NULL)
    {
    len++;
    p=p->next;
    }
    return len;
    }
    实现单链表的打印
    void print(node *head)
    {
    node *p;
    int index=0;
    if(head->next==NULL)//链表为空
    {
    printf("link is empty\n");
    return;
    }
    p=head->next;
    while(p!=NULL)
    {
    printf("the %dth node is:%d\n",++index,p->data);
    p=p->next;
    }
    }

    转载于:https://www.cnblogs.com/zhangaihua/p/3718075.html

    展开全文
  • 单链表元素最大值max 通过遍历元素,与最大值max作比较,将较大值附给max 输出最大值max 算法: /* *title:P53页程序设计第6题 *writer:weiyuexin *data:2020-9-26 */ #include<iostream> using ...

    思路:

    1. 设单链表首个元素为最大值max
    2. 通过遍历元素,与最大值max作比较,将较大值附给max
    3. 输出最大值max

    算法:

    /*
    *title:P53页程序设计第6题
    *writer:weiyuexin
    *data:2020-9-26
    */
    
    #include<iostream>
    
    using namespace std;
    
    #define ElemType int
    
    typedef struct LNode{
        ElemType data;   //定义数据域
        struct LNode *next;
    }LNode,*LinkList;
    
    void CreateList(LinkList &L){
    
        L = new LNode;     //申请存储空间
        L->next = NULL;
    
        int n;
        cout<<"请输入单链表的长度:"<<endl;
        cin>>n;
    
        LinkList r = L;
    
        cout<<"请输入单链表的数据元素:"<<endl;
        for(int i=0;i<n;i++){
            LinkList p = new LNode;
            cin>>p->data;
            p->next = NULL;
            r->next = p;
            r = p;
        }
    }
    
    void Display(LinkList L){
        LinkList p = L->next;
        while(p){
            cout<<p->data<<" ";
            p = p->next;
        }
        cout<<endl;
    }
    
    void FindMax(LinkList L){
        int max = L->next->data;
        LinkList p = L->next;
        int i = 1,maxnode;
        while(p){
            if(p->data > max){
                max = p->data;
                maxnode = i;
            }
            p = p->next;
            ++i;
        }
        cout<<max<<"     ";
        cout<<maxnode<<endl;
    }
    int main(){
        cout<<"P53页第7题:"<<endl;
        cout<<endl;
        LinkList L;
        CreateList(L);
        cout<<"初始化后的单链表为:"<<endl;
        Display(L);
        cout<<"该单链表中数据元素最大值以及最大值对应的结点分别为:"<<endl;
        FindMax(L);
        return 0;
    }
    
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  • 1.题目: Problem Description 建立单链表,完成遍历操作,并且计算单链表结点...例如:1 2 3 4 5 0 代表一个长度为5的单链表。 遇到-1,结束程序。 Output 输出该单链表长度,并且输出的单链表。 Sample Input
  • 建立一个单链表

    2018-12-17 21:22:39
    建立一个单链表在单链表上实现插入、删除和查找等操作,有菜单。 ⑴初始化字符型单链表H; ⑵采用尾插法建立单链表H,如(a,b,c,d,c); ⑶输出单链表H的长度; ⑷输出单链表H的第i个元素,如输出单链表H的第3...
  • typedef struct { Elemtype data[Max]; int length; }SqList; typedef struct LNode { Elemtype data; struct LNode *next; }LNode,*LinkList; LinkList convert(SqList L) { LinkList A=(LNode*)...n;i++) { .
  • #include "iostream" using namespace std; #define MAXSIZE 100 typedef struct Node { char data; struct Node *next;...LinkList Init_LinkList()//建立头结点,初始化单链表,即建立空表 { Node *L;
  • 找到⼀未知长度单链表的倒数第K节点 提示: head—>1—>2—>3—>4—>5—>6—>7—>8—>9—>10—>NULL.其中倒数第0节点是NULL,倒数第1节点是10,倒数第10节点是1. // // 找到⼀未知长度单链表的倒数第K...
  • 实现方法:我们可以设置两个指针变量,node *p ,node *q,p每次移动两个位置,q每次移动一个位置,当p.next==null时候,这时候q指针就到了链表的中间位置。 实现代码如下:void search(node *head,node *mid) { ...
  • C语言创建一个n个结点的单链表

    千次阅读 2011-08-02 18:49:18
    #include #include //类型定义typedef使用的时候如果直接按下面的方式定义,是错误的: /*typedef struct Node { int data; Node * next; }; */ //应该定义: ty
  • #include<iostream> using namespace std; typedef struct lnode { int data; struct lnode *next;...L,int n) { lnode *r; L=new lnode; L->next=NULL; r=L; for(int i=0;i<n;i++)
  • 已知指针ha和hb分别指向两个单链表的头结点,并且已知两链表的长度分别m和n。试写算法将这两链表连接一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法...
  • 指定表长度n,输入n之后终止...指定表长度n #include #include const int n=3;//事先规定链表长度n typedef struct node { int data; struct node *next; }node; //单链表的建立函数********* node *creat(i
  • n个有序单链表合并

    千次阅读 2014-05-15 15:26:21
    n个长度为m的有序单链表进行合并,使合并之后的单链表保持有序,求时间复杂度。这是今年阿里巴巴武汉实习生招聘的一道填空题,我参加了并最终获得offer只可惜由于事先签了腾讯所以本着诚信的原则,我选择放弃阿里...
  • 单链表长度

    万次阅读 2017-05-18 17:34:58
    #include #include typedef struct linknode { int data; linknode *next; } Node,*Linklist;...Linklist CreateList_end(int n);//尾插法建立链表 void ShowList(Linklist L);//输出链表内容 int Link
  • 单链表

    2017-08-13 17:54:35
    现在已经进入专业课复习,王道的数据结构复习指导的第一个数据结构虽然是顺序表,但是过于简单,就不想写了。现在复习到链表,首先单链表数其他链表的基础。所以首先把单链表所有基础操作全部写一遍。包括建表,插入...
  • 设计算法将一个带头结点的单链表L1分解两个具有相同结构的链表L2、L3,其中L2表的结点L1表中值小于零的结点,而L3表的结点L1表中值大于零的结点(链表L1中的元素非零整数,要求L2、L3表利用L1表的结点)。...
  • MERGEFORMAT 4单链表带头结点#include #include /*带头结点的单链表的操作该链表中,数据元素是int,我们让头结点的数据域存储链表的实际长度*//*链表节点的类型定义*/struct node{int data;struct node *next;};/...
  • /*找出一个无环单链表里面的倒数第K个元素,时间复杂度O(n) 解决办法:用两个同步指针,第一个先走k-1步,第二个才开始走, 然后他们开始同步走,当第一个指针走到末尾的时候,第二个指针 就指向了倒数第K个...
  • 一个带头结点的单链表分解成两个单链表 题目描述: /* 设计一个算法,将一个带头结点的单链表分解成两个具有相同结构的 链表B和C,其中B白哦的结点A中小于0的结点,C表的结点A中大于0 的结点, 要求B和C 仍...
  • 在长度为n的( )上,删除第一个结点,其算法的时间复杂度O(n)。 A.只有表头指针的不带表头结点的循环单链表。B.只有表尾指针的不带表头结点的循环单链表。C.只有表尾指针的带表头结点的循环单链表。D.只有表头...
  • 给定一个单链表,反转其中位置 m 到 n 的元素。 说明: 1 ≤ m ≤ n ≤ 链表长度。 输入: 1->2->3->4->5->NULL, m = 1, n = 3 输出: 1->4->3->2->5->NULL 要求空间复杂度O(1) #...
  • public static Node mergeTwoLists(Node headA,Node headB){ Node newHead=new Node(-1); Node tmp=newHead; while(headA!=null&&headB!=null){ if(headA.data<headB.data){ tmp.next=headA;... .
  • 在长度为n的()上,删除第一个元素,其算法的时间复杂度O(n) A.只有表头指针的不带表头结点的循环单链表 B.只有表尾指针的不带表头结点的循环单链表 C.只有表尾指针的带表头结点的循环单链表 D.只有表头指针的带...
  • 单链表拆分特定的单链表

    千次阅读 2016-09-22 21:16:48
    一个给定的单链表拆分两个特定的单链表
  • 单链表之创建与求单链表长度

    千次阅读 2015-12-11 22:59:05
    最近忙于考试,刷题倒是耽搁了,今天一个学弟问到关于返回一个呆头结点的单链表长度问题,想了下,就花了点时间写了下。 #include #include typedef int ElemType; typedef struct Node { ElemType data; struct...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,615
精华内容 17,046
关键字:

在一个长度为n的单链表