精华内容
下载资源
问答
  • 创建单链表

    2018-06-25 19:01:00
    还记得创建单链表的这些代码还是大学时候写过,现在再重新写一写,为面试做准备吧: 创建单链表的两种形式:头插法和尾插法 // 演示创建2种单链表的方式 // 【C++基础】单链表.cpp #include "stdafx.h" #...

    还记得创建单链表的这些代码还是大学时候写过,现在再重新写一写,为面试做准备吧:

    创建单链表的两种形式:头插法和尾插法

    // 演示创建2种单链表的方式
    // 【C++基础】单链表.cpp
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    struct link {
    	int data;
    	link *next;
    };
    
    //头插法建立单链表
    link *creatLink_head(link *head) {
    	link *node;
    	int tmpData;
    	cout << "输入元素,以空格分隔:";
    	do {
    		cin >> tmpData;
    		if (tmpData == 0)
    			break;
    
    		node = new link;
    		node->data = tmpData;
    		node->next = head->next;
    		head->next = node;
    
    	} while (node->data != 0);
    	return head->next;
    }
    
    //尾插法建立单链表
    link *creatLink_tail(link *head) {
    	link *node, *tail = head;
    	int tmpData;
    	cout << "输入元素,以空格分隔:";
    	do {
    		cin >> tmpData;
    		if (tmpData == 0)
    			break;
    		node = new link;
    		node->data = tmpData;
    		tail->next = node;
    		tail = node;
    		tail->next = NULL;
    	} while (tmpData != 0);
    	return head->next;
    }
    
    //遍历输出
    void printLink(link *p){
    	while (p != NULL) {
    		cout << p->data << "  ";
    		p = p->next;
    	}
    	cout << endl;
    }
    int main()
    {
    	link *head, *p_head, *p_tail;
    	head = new link;
    	head->next = NULL;
    	//方式1:头插法创建单链表
    	//p_head = creatLink_head(head);
    	//printLink(p_head);
    
    	//方式2:尾插法创建单链表
    	p_tail = creatLink_tail(head);
    	printLink(p_tail);
    	
        return 0;
    }
    

     

    转载于:https://www.cnblogs.com/xuelisheng/p/9225810.html

    展开全文
  • 创建单链表的头插法与尾插法详解

    万次阅读 多人点赞 2018-09-26 20:54:30
    创建单链表 关于数据结构的入门,就是从顺序表和单链表开始。 我们不讲顺序表,直接从单链表开始我们的数据结构和算法的学习之路。 单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方法有很多种,...

    创建单链表

    关于数据结构的入门,就是从顺序表和单链表开始。
    我们不讲顺序表,直接从单链表开始我们的数据结构和算法的学习之路。

    单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方法有很多种,但都大同小异。

    在这里插入图片描述

    正如这幅图中所表示的那样,单链表就是由可能不连续的数据所组合而成的数据结构。 其中每个数据分为两部分,一部分是数据存储的位置,称为数据域,另外指针所存储的地方,称为指针域

    typedef struct Node {
    	int data;                    // 存储链表数据
    	struct Node *next;     		//  存储结点的地址
    }LNode,*Linklist;
    

    在进入创建链表之前,我们先写好主函数的用来输出的输出函数。

    void Illustrate(Linklist head) {
    	Linklist tem = head;                 //  将头指针的地址赋给临时的指针
    	while (tem->next != NULL) {       //  指向最后一个结点的指针域时会停止
    		tem = tem->next;               //  结点不断向后移动
    		printf("%d\n", tem->data);
    	}
    }
    
    int main() {
    	Linklist head = NULL;            //  链表的头指针
    	head = Creat_list(head);        //  创建链表
    	Illustrate(head);               //  输出每个结点的数据域
    	system("pause");
    	return 0;
    }
    

    头插法创建单链表

    在这里插入图片描述

    头插法代码:

    Linklist Creat_list(Linklist head) {
    	head = (Linklist)malloc(sizeof(Lnode));      //  为头指针开辟内存空间
    	Lnode *node = NULL;                    //  定义新结点
    	int count = 0;                          //  创建结点的个数
    	head->next = NULL;              
    	node = head->next;              	//  将最后一个结点的指针域永远保持为NULL
    	printf("Input the node number: ");
    	scanf("%d", &count);
    	for (int i = 0; i < count; i++) {
    		node = (Linklist)malloc(sizeof(Lnode));     //  为新结点开辟内存空间
    		node->data = i;               //  为新结点的数据域赋值
    		node->next = head->next;          //  将头指针所指向的下一个结点的地址,赋给新创建结点的next 
    		head->next = node;          //  将新创建的结点的地址赋给头指针的下一个结点
    	}
    	return head;
    }
    

    头插法创建链表的根本在于深刻理解最后两条语句

    	node->next = head->next;          //  将头指针所指向的下一个结点的地址,赋给新创建结点的next 
    	head->next = node;          //  将新创建的结点的地址赋给头指针的下一个结点
    

    创建第一个结点

    执行第一次循环时,第一次从堆中开辟一块内存空间给node,此时需要做的是将第一个结点与 head 连接起来。而我们前面已经说过,单链表的最后一个结点指向的是 NULL

    因此插入第一个结点时,我们需要将头指针指向的 next 赋给新创建的结点的 next , 这样第一个插入的结点的 next 指向的就是 NULL。 接着,我们将数据域,也就是 node 的地址赋给 head->next, 这时 head->next 指向的就是新创建的 node的地址。而 node 指向的就是 NULL

    接着我们创建第二个结点

    因为使用的头插法,因此新开辟的内存空间需要插入 头指针所指向的下一个地址,也就是新开辟的 node 需要插入 上一个 nodehead 之间。 第一个结点创建之后,head->next 的地址是 第一个 node 的地址。 而我们申请到新的一块存储区域后,需要将 node->next 指向 上一个结点的首地址, 而新node 的地址则赋给 head->next。 因此也就是 node->next = head->next
    这样便将第一个结点的地址赋给了新创建地址的 next 所指向的地址。后两个结点就连接起来。

    接下来再将头结点的 next 所指向的地址赋为 新创建 node 的地址。 head->next = node ,这样就将头结点与新创建的结点连接了起来。 此时最后一个结点,也就是第一次创建的结点的数据域为0,指针域为 NULL

    创建更多的结点也就不难理解。
    执行一次:
    在这里插入图片描述

    会发现,头插法创建链表时候,就相当于后来居上。 后面的结点不断往前插,而最后创建的结点在第一个结点处, 第一个创建的结点变成了尾结点。

    尾插法创建单链表

    在这里插入图片描述

    尾插法代码:

    Linklist Creat_list(Linklist head) {
    	head = (Linklist)malloc(sizeof(Lnode));          //  为头指针开辟内存空间
    	Linklist node = NULL;           //  定义结点
    	Linklist end = NULL;            //  定义尾结点
    	head->next = NULL;              //  初始化头结点指向的下一个地址为 NULL
    	end = head;                     //  未创建其余结点之前,只有一个头结点
    	int count = 0 ;                 //  结点个数
    	printf("Input node number: ");
    	scanf("%d", &count);
    	for (int i = 0; i < count; i++) {
    		node = (Linklist)malloc(sizeof(Lnode));          //  为新结点开辟新内存
    		node->data = i;                                  //  新结点的数据域赋值
    		end->next = node;                      		
    		end = node;
    	}
    	end->next = NULL;
    }
    

    尾插法深刻理解:

    end->next = node;                      		
    end = node;
    

    尾插法创建第一个结点

    刚开始为头结点开辟内存空间,因为此时除过头结点没有新的结点的建立,接着将头结点的指针域 head->next 的地址赋为 NULL。因此此时,整个链表只有一个头结点有效,因此 head此时既是头结点,又是尾结点。因此将头结点的地址赋给尾结点 end 因此:end = head。 此时end 就是 head, head 就是 endend->next 也自然指向的是 NULL

    尾插法创建第二个结点

    创建完第一个结点之后,我们入手创建第二个结点。 第一个结点,endhead 共用一块内存空间。现在从堆中心开辟出一块内存给 node,将 node 的数据域赋值后,此时 end 中存储的地址是 head 的地址。此时,end->next 代表的是头结点的指针域,因此 end->next = node 代表的就是将上一个,也就是新开辟的 node 的地址赋给 head 的下一个结点地址。

    此时,end->next 的地址是新创建的 node 的地址,而此时 end 的地址还是 head 的地址。 因此 end = node ,这条作用就是将新建的结点 node 的地址赋给尾结点 end。 此时 end 的地址不再是头结点,而是新建的结点 node

    一句话,相当于不断开创新的结点,然后不断将新的结点的地址当做尾结点。尾结点不断后移,而新创的结点时按照创建的先后顺序而连接的。先来新到。

    尾插法创建单链表,结点创建完毕

    最后,当结点创建完毕,最后不会有新的结点来替换 end ,因此最后需要加上一条 end->next = NULL。将尾指针的指向为 NULL

    创建更多结点也自然容易理解了一些。

    执行一次:
    在这里插入图片描述

    总结

    由上面的例子以及比较,我们可以看见:

    1. 头插法相对简便,但插入的数据与插入的顺序相反;
    2. 尾插法操作相对复杂,但插入的数据与插入顺序相同。

    两种创建的方法各有千秋,根据实际情况选择不同的方法。

    关于链表的相关其他操作,请浏览相关文档。

    展开全文
  • 使用结构体定义单链表节点 typedef struct Node * pNode; struct Node { int Data; pNode Next;//结构的递归定义 等效于注释代码 // struct Node * Next; }; 主函数 #include <stdio.h> #define NUM...

    使用结构体定义单链表节点

    typedef struct Node *  pNode;
    struct Node 
    {
    	int  Data;
    	pNode Next;//结构的递归定义  等效于注释代码 
    //	struct  Node *  Next; 
    };

    主函数

    #include <stdio.h>
    #define  NUM  6  //用于指定数组大小 
    pNode creatList(); //创建固定数值的链表 
    pNode inputCreatList();//键盘输入创建链表 
    int main()
    {	
    	pNode tmp=(pNode)malloc(sizeof(struct Node) );
    	tmp=creatList();	
    	tmp=inputCreatList();
    	return 0;
    }

    运行结果


     使用固定数组创建链表

    pNode creatList()
    {
    	int a[NUM] ={2,1,6,3,4,6};
    	int i=0,j=NUM;
    	pNode head=(pNode)malloc(sizeof(struct Node) );
    	pNode tmp=(pNode)malloc(sizeof(struct Node) );
    	tmp=head;
    	for(i=0;i<NUM;i++)
    	{	
    		pNode p=(pNode)malloc(sizeof(struct Node) );
    		tmp->Data=a[i];
    		tmp->Next=p;
    		tmp=p;
    //		tmp->Data=a[i];
    			
    	}
    	tmp=head;
    	
    	//遍历输出链表	
    	printf("方法1:固定数值创建链表:\n"); 
    	while(j--)
    	{
    	
    		printf("%d, ",tmp->Data);
    		tmp=tmp->Next;
    	}
    	return head;
    }

    使用键盘输入的值创建链表 

    pNode inputCreatList()
    {	
    	int inN; 
    	pNode head = (pNode) malloc(sizeof(struct Node));
    	pNode tmp=	(pNode) malloc(sizeof(struct Node));
    	tmp=head;
    	scanf("%d",&inN);
    	printf("inN:%d\n",inN);
    	
    	while(inN--)
    	{
    
    	    pNode p =(pNode) malloc (sizeof(struct Node));
    		tmp->Next=p;
    		scanf("%d",&(p->Data));  // 键盘输入值为指针赋值 
    		p->Next=NULL;  // 新建的节点p next 存储地址初始化为 空 
    		tmp=p;         // 当前指针移动到下一个节点 
    	}
    	tmp=head->Next;   // head节点不是第一个节点 跳过。。 
    	printf("方法2:键盘输入数值创建链表:\n"); 
    	while(tmp!=NULL)
    	{
    		printf("%d, ",tmp->Data);
    		tmp=tmp->Next;
    		
    	}
    	
    	return head; 
    	
    }
    

     参考:

     单链表的创建--从零开始

     

    展开全文
  • c语言创建单链表

    2019-06-07 20:20:00
    //创建单链表 #include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct Student STU; //用typedef 新定义结构体名字为 STU;struct Student //定义时不能直接用STU{char name...
    //创建单链表
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    typedef struct Student STU; //用typedef 新定义结构体名字为 STU;
    struct Student //定义时不能直接用STU
    {
     char name[20];
     float score;
     STU* next;// 定义指向结构体的指针
    };
    int main()
    {
     STU a, b, c, *P, *head;
     strcpy(a.name, "pan");
     a.score = 90;
     strcpy(b.name, "pan1");
     b.score = 96;
     strcpy(c.name, "pan2");
     c.score = 93;
     head = &a;
     P = head;
     a.next = &b;
     b.next = &c;
     c.next = NULL;
    /* do
     {
      printf("%s %5.1f", P->name, P->score);
      P = P->next;
     } while (P != NULL);
     */
     while (P != NULL)
     {
      printf("%s %5.1f", P->name, P->score);
      P = P->next;
     };

     /* 注if的条件判断只会执行一次,While 的条件才会循环判断。
     if (P != NULL)
     {
      printf("%s %5.1f", P->name, P->score);
      P = P->next;
     }
     */
     return 0;
    }

     

    转载于:https://www.cnblogs.com/pquan/p/10989097.html

    展开全文
  • C#代码创建单链表

    2020-01-06 20:59:42
    今天分享一篇用C#代码创建单链表以及单链表的增删改查的脚本,里面具体的重要代码块我已经标明了详细的注释,推荐了解单链表数据结构的伙伴们可以直接上手,不太了解的话个人建议先去看一下单链表的数据结构!...
  • 创建单链表算法

    2017-11-04 23:27:23
    创建单链表算法 实现代码: #include "stdio.h" #include "stdlib.h" typedef int datatype; typedef struct LNode{ datatype data; struct LNode *next; }LNode; int main(){ LNode *head,*p1; int i=1,n; ...
  • 代码: #include<stdio.h> #include<stdlib.h> #define OK 1 #define FALSE 0 typedef int Status; typedef float ElemType; typedef struct LNode { ...//创建单链表 void CreatList
  • C++创建单链表

    万次阅读 2016-03-15 22:04:20
    下面是C++创建单链表的代码,记录一下省的自己以后忘了(有些头文件没用,我没挑一块粘上来了) #include using namespace std; /* 创建一个单链表 */ struct ListNode{ int m_key; ListNode
  • 接下来的教程可能会非常难以理解,因此我用了差不多整整一天时间来理解别人写的C语言循环创建单链表的原理。所以如果你一时读不懂,不要担心,你可以在纸上演算,慢慢体会,这需要一个过程。 然后此篇文章与其他...
  • js创建单链表及倒序单链表

    千次阅读 2017-09-14 21:16:27
    最近在准备校招,又拾起了数据结构……希望能早点找到心仪的工作嘻嘻创建单链表首先要有节点,节点包含两部分,一部分存储数据,一部分存储指向下一个节点的链接。节点可以用一个类来表示:function Node(data){ ...
  • 尾插法创建单,即每次都将新的结点链接到链表的最后一个结点的后面,从而达到创建单链表的过程。例如,使用尾插法将数据 {1,2,3,4} 用单链表的形式进行存储,其存储过程如下提示:图中所示的单链表没有设置头结点,...
  • 头插法创建单链表

    千次阅读 2019-03-25 21:13:26
    头插法创建单链表(C)(25分) 本题要求实现两个函数,输入n个数据,采用头插法创建单链表并打印。例如:如果输入4 ,再输入3 7 9 5,则应打印输出5 9 7 3。 链表结点结构定义: struct Node { //链表结点 int ...
  • 使用二级指针创建单链表,程序功能菜单如图所示void showMenu(){ printf("\t\t\t\t\t\t1.使用头插法创建链表\n"); printf("\t\t\t\t\t\t2.使用尾插法创建链表\n"); printf("\t\t\t\t\t\t3.按序号查找\n"); ...
  • 单链表节点类描述如下public class Node {public Object data; //存放节点值public Node next; //后继节点的引用 ,将data,next定义为public类型,就不需要get,set方法了public Node(){this(null,null); //无参时...
  • 这里写自定义目录标题Javascript两种方法创建单链表节点定义链表定义1.头插法2.尾插法 Javascript两种方法创建单链表 节点定义 // 节点 function Node(data, next){ this.data = data; this.next = next; } ...
  • C语言创建单链表

    万次阅读 多人点赞 2019-04-23 21:32:49
    单链表 链表节点结构体 struct node { char name[10]; float score; } typedef struct node { struct node; struct node*next; }LinkList; 初始化一个链表 void InitLinkList(LinkList*&...
  • 创建单链表 头插法: typedef struct Linkn { int data; struct Linkn *next }Linknode; void *Creatlist(int a[],int n)//建立单链表 { Linknode *L=(Linlnode *)malloc(sizeof(Linknode)); L->next=NULL;/...
  • C#创建单链表,翻转单链表 直接上代码 class Program { static void Main(string[] args) { int[] src = { 1, 2, 3, 4, 5, 6, 7 }; Node n = Build...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,453
精华内容 2,181
关键字:

创建单链表