精华内容
下载资源
问答
  • 单链表创建遍历的分析实现 需求 总体描述:使用带head头的单向链表实现水浒英雄排行榜管理 具体描述: 完成对英雄人物的增删改查操作,注:删除和修改,查找可以考虑学员独立完成,也可带学员完成。 第一种...

    单链表创建和遍历的分析实现

    • 需求

      • 总体描述:使用带head头的单向链表实现水浒英雄排行榜管理
      • 具体描述:
        • 完成对英雄人物的增删改查操作,注:删除和修改,查找可以考虑学员独立完成,也可带学员完成。
        • 第一种情形在添加英雄时,直接添加到链表的尾部。
        • 第二种情形在添加英雄时,根据排名将英雄插入到指定位置。(如果有这个排名,则添加失败,并给出提示)
    • 第一种添加

      • 对链表的分析示意图
        在这里插入图片描述

      • 思路

        • 先创建一个head头结点,作用就是表示单链表的头。
        • 后面我们每添加一个节点,就直接加入到链表的最后,让最后一个节点的next指向要插入的节点。
    • 遍历

      • 通过一个辅助变量,帮助遍历整个链表。

      • 代码实现
        ​ 链表基本操作实现

    • 第二种添加:按照编号顺序添加

      • 首先找到新添加的节点的位置,是通过辅助变量(指针),通过遍历来搞定。

      • 新的节点的next=temp.next
        在这里插入图片描述

      • 代码实现

        链表基本操作实现

      • 解读:实际上,第二种插入方法,实现了链表对插入的数据进行有序化处理,即插入的顺序杂乱无章,输出的时候是有序的。体现了不能重复插入的效果,插入的时候,如果链表中之前已经存在了就不能再插入。

    展开全文
  • 创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。创建的过程:1.定义节点的数据结构c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如:2.动态创建节点创建节点的过程...

    创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。

    创建的过程:

    1.定义节点的数据结构

    c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如:

    2.动态创建节点

    创建节点的过程中要用到三个指针:

    p_head:指向头节点的指针

    p_tail:指向当前尾节点的指针

    pNew:指向新增节点的指针

    就像数组一样,我们能通过数组名或数组的第一个元素的地址来找到该数组,链表是通过头指针来找到的,所以创建的第一步要

    定义一个头指针,接着我们要让p_tail指针指向头结点(一开始头节点就是尾节点),动态创建一个节点,并用pNew指针来指向,同时把新节点加到链表末尾(即p_tail的指向的下一节点为pNew指向的节点),把新节点指向的节点赋为空(此时新节点加上后就变为最后一个节点了,所以它指向的下一节点为空),设置尾节点为新节点(即p_tail=pNew),再添加新节点是,重复上一步骤。

    创建的代码实现如下: 顺序遍历链表:

    展开全文
  • C++单链表创建遍历、插入、删除结点、整体删除、反转 单链表的定义 struct ListNode { int val; ListNode *next; }; 创建单链表 void creatlist(ListNode*head,int N) { ListNode *pre = head; cin >...

     C++单链表创建、遍历、插入、删除结点、整体删除、反转

    单链表的定义

    struct ListNode
    {
    	int val;
    	ListNode *next;
    };

    创建单链表

    void creatlist(ListNode*head,int N) {
    	ListNode *pre = head;
    	cin >> head->val;
    	for (int i = 0; i < N-1; i++)
    	{
    		ListNode *ls = new ListNode;
    		cin >> ls->val;
    		ls->next = NULL;
    		pre->next = ls;
    		pre = ls;
    	}
    }

    单链表遍历

    void readlist(ListNode *head,int N) {
    	ListNode*a;
    	a = head;
    	for (int i = 0; i < N; i++)
    	{
    		cout << a->val << " ";
    		a = a->next;
    	}
    }

    单链表插入结点

    bool insertlist(ListNode*head, int n, int vals)
    {
    	int j = 1;
    	ListNode*pp; ListNode*s;
    	pp = head;
    	while (pp&&j < n)
    	{
    		pp = pp->next;
    		++j;
    	}
    	if (!pp || j > n) return false;
    	s = new ListNode;
    	s->val=vals;
    	s->next = pp->next;
    	pp->next = s;
    	return true;
    }

    单链表删除结点

    bool deletelist(ListNode * head, int i)
    {
    	int x = 1;
    	ListNode*p2 = head;
    	ListNode*q2;
    	while (p2->next&&x < i)
    	{
    		p2 = p2->next;
    		++x;
    	}
    	if (!(p2->next) || x > i) return false;
    	q2 = p2->next;
    	p2->next = q2->next;
    	delete q2; 
    	return true;
    }
    

    单链表整体删除

    bool clearlist(ListNode*head)
    {
    	ListNode*p;
    	ListNode*q;
    	p = head;
    	while (p)
    	{
    		q = p->next;
    		delete p;
    		p = q;
    
    	}
    	return true;
    }

    示例

    #include <iostream>
    #include <string>
    #include <vector>
    #include "stdio.h"
    using namespace std;
    struct ListNode
    {
    	int val;
    	ListNode *next;
    };
    void creatlist(ListNode*head,int N) {
    	ListNode *pre = head;
    	cin >> head->val;
    	for (int i = 0; i < N-1; i++)
    	{
    		ListNode *ls = new ListNode;
    		cin >> ls->val;
    		ls->next = NULL;
    		pre->next = ls;
    		pre = ls;
    	}
    }
    void readlist(ListNode *head,int N) {
    	ListNode*a;
    	a = head;
    	for (int i = 0; i < N; i++)
    	{
    		cout << a->val << " ";
    		a = a->next;
    	}
    }
    ListNode * reverselist(ListNode*head)
    {
    	if (head == nullptr)return head;
    	ListNode *dummy = new ListNode;
    	dummy->next = head;
    	ListNode*prev = head;
    	ListNode*pcur = prev->next;
    	while (pcur!=nullptr)
    	{
    		prev->next = pcur->next;
    		pcur->next = dummy->next;
    		dummy->next = pcur;
    		pcur = prev->next;
    	}
    	return dummy->next;
    
    }
    bool clearlist(ListNode*head)
    {
    	ListNode*p;
    	ListNode*q;
    	p = head;
    	while (p)
    	{
    		q = p->next;
    		delete p;
    		p = q;
    
    	}
    	return true;
    }
    bool insertlist(ListNode*head, int n, int vals)
    {
    	int j = 1;
    	ListNode*pp; ListNode*s;
    	pp = head;
    	while (pp&&j < n)
    	{
    		pp = pp->next;
    		++j;
    	}
    	if (!pp || j > n) return false;
    	s = new ListNode;
    	s->val=vals;
    	s->next = pp->next;
    	pp->next = s;
    	return true;
    }
    
    bool deletelist(ListNode * head, int i)
    {
    	int x = 1;
    	ListNode*p2 = head;
    	ListNode*q2;
    	while (p2->next&&x < i)
    	{
    		p2 = p2->next;
    		++x;
    	}
    	if (!(p2->next) || x > i) return false;
    	q2 = p2->next;
    	p2->next = q2->next;
    	delete q2; 
    	return true;
    }
    
    int main()
    {
    	ListNode *head = new ListNode;
    	int N = 0;
    	cout << "输入链表长度" << endl;
    	cin >> N;
    	cout << "创建链表" << endl;
    	creatlist(head, N);
    	cout << "读取链表" << endl;
    	readlist(head, N);
    	cout << endl;
    	cout << "清空链表" << endl;
    	//cout << clearlist(head) << endl;
    	cout << "插入链表" << endl;
    	cout << insertlist(head,2,4) << endl;
    	readlist(head, N+1);
    	cout <<endl<< "单链表节点删除" << endl;
    	cout << deletelist(head,2) << endl;
    	readlist(head, N);
    	cout << endl;
    	cout << "反转链表" << endl;
    	ListNode *rever = reverselist(head);
    	readlist(rever, N); cout << endl;
    	return 0;
    }
    
    
    
    

     

    展开全文
  • C语言实现单链表创建遍历

    万次阅读 2016-07-28 15:58:43
    创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。 创建的过程: 1.定义节点的数据结构 c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如:   //定义链表中的...

    创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。

    创建的过程:

    1.定义节点的数据结构

    c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如:

     

    //定义链表中的节点
    typedef struct node{
       int data;            //链表中的数据
       struct node * p_next;//指向下一节点的指针
    }Node,*pNode;

    2.动态创建节点

     

    创建节点的过程中要用到三个指针:

    p_head:指向头节点的指针

    p_tail:指向当前尾节点的指针

    pNew:指向新增节点的指针

    就像数组一样,我们能通过数组名或数组的第一个元素的地址来找到该数组,链表是通过头指针来找到的,所以创建的第一步要

    定义一个头指针,接着我们要让p_tail指针指向头结点(一开始头节点就是尾节点),动态创建一个节点,并用pNew指针来指向,同时把新节点加到链表末尾(即p_tail的指向的下一节点为pNew指向的节点),把新节点指向的节点赋为空(此时新节点加上后就变为最后一个节点了,所以它指向的下一节点为空),设置尾节点为新节点(即p_tail=pNew),再添加新节点是,重复上一步骤。

    创建的代码实现如下:

    pNode CreateList(){
     int i, len;
     //开辟头结点
     pNode p_head = (pNode) malloc(sizeof(Node));
     pNode p_tail = p_head;
     p_tail->p_next = NULL;
     printf("请输入节点的个数:");
     scanf("%d",&len);
     for(i = 0;i < len; i++){
        pNode pNew = (pNode) malloc(sizeof(Node));//开辟新节点
        scanf("%d", &pNew->data);
        p_tail->p_next = pNew;//将尾节点指向新节点
        pNew->p_next = NULL;//新节点应该指向NULL
        p_tail = pNew;//当前尾节点为新节点
     }
      return p_head;
    }

     

    顺序遍历链表:

    void TraverseList(pNode h){
      pNode p = h->p_next;
      while(p != NULL){
        printf("%d\n",p->data);
        p = p->p_next;
      }
    }

    测试代码:

    int main()
    {
    pNode test = CreateList();
    TraverseList(test);
    return 0;
    }
    //输入1 2 3
    //输出1 2 3

     

     

     

    展开全文
  • 创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。创建的过程:1.定义节点的数据结构c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如://定义链表中的节点typedef ...
  • 初学单链表碰到一个小坑:下面代码是一个很简单的创建遍历链表的过程。 #include<stdio.h> #include<malloc.h> #include<string.h> typedef struct student{ int score;//数据域; struct ...
  • #include #include typedef struct Node { int data; struct Node *next; }Node,*Linklist;...Node *creat_List_a()//尾插法建立单链表 { Linklist L; Node *p; int temp; L=(Linklist)malloc(sizeof
  • 单链表创建及遍历

    2020-05-22 00:24:41
    读入n值n个整数,建立单链表遍历输出。...//单链表创建遍历 #include<stdlib.h> #include<stdio.h> typedef int ElemType; //定义节点 typedef struct node{ int data; st
  • 7-2 单链表创建及遍历 (20分)读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2 ...
  • 单链表的应用案例: 使用带head头的单向链表实现-水浒英雄排行榜管理完成对英雄人物的增删改查操作 第一种方法(不考虑排名时) : 在添加英雄时,直接添加到链表的尾部 思路的分析示意图: 具体实现分析:
  • PTA 单链表创建及遍历

    千次阅读 2018-12-20 11:06:41
    单链表创建及遍历 题目链接 需要权限 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组...
  • 单链表创建及遍历 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2 10 5 输出...
  • 单链表创建及遍历 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2 10 5 输出...
  • 7-5 单链表创建及遍历 (15分) 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2...
  • 2-6 单链表创建及遍历 (30分) 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 2 10 5 输出样例: 10 5...
  • 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2 10 5 输出样例: 在这里给出相应...
  • 7-7 单链表创建及遍历 (10分) 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: ...
  • 7-1 单链表创建及遍历 (15分) 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2...
  • 7-7-3 单链表创建及遍历 (30 分) 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如...
  • 7-6 单链表创建及遍历 (20分) 读入n值n个整数,建立单链表遍历输出。 输入格式: 读入nn个整数。 输出格式: 输出n个整数,以空格分隔(最后一个数的后面没有空格)。 输入样例: 在这里给出一组输入。例如: 2...
  • PTA 7-7 单链表创建及遍历 (30 分)

    千次阅读 2019-10-01 19:01:06
    PTA 7-7 单链表创建及遍历 (30 分) #include <iostream> #include <cstdlib> #include <ctime> using namespace std; typedef int T; struct LinkNode //结点定义 { T data;//数据域 LinkNode...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,053
精华内容 11,221
关键字:

单链表的创建及遍历