精华内容
下载资源
问答
  • C语言单链表创建打印

    2018-05-28 22:18:45
    C语言单链表创建与打印的演示程序。VISUAL C++6.0环境编译成功。
  • 单链表创建的两种方式

    千次阅读 多人点赞 2019-10-20 12:17:01
    单链表创建的两种方式 导语:在前面的博客中我们分别介绍了单链表的反转实现以及单链表插入的实现,都是基于单链表创建之后的操作,本片博客将介绍如何创建单链表或者说是单链表创建的两种方式。 创建单链表 ...

    单链表创建的两种方式

    导语:在前面的博客中我们分别介绍了单链表的反转实现以及单链表插入的实现,都是基于单链表创建之后的操作,本片博客将介绍如何创建单链表或者说是单链表创建的两种方式。

    在这里插入图片描述

    创建单链表

    单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方式有很多种,大同小异。在这里我们将详细的介绍一下头插法创建链表和尾插法创建链表。
    在这里插入图片描述
    如上所示单链表就是由可能不连续的数据所组合而成的数据结构。 其中每个数据分为两部分,一部分是数据存储的位置,称为数据域(data),另外指针所存储的地方,称为指针域。

    typedef struct Node{
    	int data;//存储数据域
    	struct Node *next;//存储指针域
    }LNode,*LinkedList
    

    头插法创建链表

    思路:从一个空表开始,重复读入数据,生成新结点,将所读入数据存储到新结点的数据域中,然后在将新结点插入到当前链表的表头结点之后。

    代码:

    Linkedlist Create_list(LinkedList head){
    	head = (Linkedlist)malloc(sizeof(Lnode));//为头指针开辟内存空间
    	Lnode *node = null;//定义新结点
    	int count = 0;//创建结点个数
    	head->next = null;
    	node = head->hext;//将最后一个结点的指针域保持为null
    	printf("输入结点个数:");
    	scanf("%d",&count);
    	for(int i=0;i<count;i++){
    		node = (Linkedlist)malloc(sizeof(Lnode));//为新结点开辟空间
    		node->data = i;//为新结点的数据域赋值
    		node->next = head->next;//将头指针指向下一个结点的地址赋给新创建的结点的next
    		head->next = node;//将头指针指向新创建的结点
    	}
    	return head;
    }
    //核心代码
    node->data = i;//为新结点的数据域赋值
    node->next = head->next;//将头指针指向下一个结点的地址赋给新创建的结点的next
    head->next = node;//将头指针指向新创建的结点

    图解:

    假设将A->B依次插入

    在这里插入图片描述
    文解

    创建第一个结点:第一次从堆中开辟一块内存空间给node,将head与第一个结点连接起来,之前说过head指向的是null;

    插入第一个结点时,将头指针指向的next赋给新创建结点的next,这样插入第一个结点的next就是null;

    接着将数据域node地址赋给head->next,也就是说head->next指向的是新创建的结点,然后新创建结点node->next指向null


    创建第二个结点:因为使用头插法,所以新开辟的内存空间需要插入头指针指向的下一个地址;

    我们申请到新的一块存储区域后,需要将 node->next 指向上一个结点的首地址,而新node的地址则赋给 head->next,也就是node->next = head->next;

    接下来再将头结点的next所指向的地址赋为新创建node的地址,也就是head->next = node,此时最后一个结点,也就是第一次创建的结点的指针域为 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("请输入结点个数: ");
     	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;
    

    图解:

    假设依次A->B插入,end为尾指针

    在这里插入图片描述
    文解:

    创建第一个结点:刚开始为头结点开辟内存空间,因为此时除过头结点没有新的结点的建立,接着将头结点的指针域 head->next 的地址赋为 NULL。

    因此,整个链表只有一个头结点有效,因此 head此时既是头结点,又是尾结点。所以将头结点的地址赋给尾结点 end 因此:end = head。

    此时end 就是 head, head 就是 end。 end->next 也自然指向的是 NULL


    创建第二个结点: 第一个结点,end 和 head 共用一块内存空间。现在从堆中心开辟出一块内存给 node,将 node 的数据域赋值后,此时 end 中存储的地址是 head 的地址;

    此时,end->next 代表的是头结点的指针域,因此 end->next = node 代表的就是新开辟的 node 的地址赋给 head 的下一个结点地址;

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

    结语:你懂了吗?

    展开全文
  • c代码-不带头结点单链表创建——头插法
  • 不带头结点创建单链表(尾插法与头插法) 首先初始化单链表,与带头节点有所不同(不带头结点初始化简单) 注意:头插法的单链表输出时为倒序 尾插法:需要注意头结点的

    不带头结点创建单链表(尾插法与头插法)

    在这里插入图片描述
    首先初始化单链表,与带头节点有所不同(不带头结点初始化简单)
    在这里插入图片描述
    注意:头插法的单链表输出时为倒序
    在这里插入图片描述
    尾插法:需要注意头结点的

    展开全文
  • 单链表创建

    2014-09-11 02:48:12
    该包主要封装了单链表创建,主要包含循环单链表及不循环单链表创建,下次上传的代码将包括Joseph环报数问题
  • 有关单链表创建,就地逆置,头插法,尾插法,输出等
  • 单链表 创建.cpp

    2021-10-16 08:21:43
    单链表 创建.cpp
  • 数据结构之单链表创建(c++) 说明:使用c++创建单链表,使用头插法,动态空间规划法,以‘’#‘’或‘$’结束j键盘输入,最后打印出链表内容。 必备条件:结构体、指针、动态规划、循环语句等 #include <stdio.h...

    数据结构之单链表创建(c++)

    说明:使用c++创建单链表,使用头插法,动态空间规划法,以‘’#‘’或‘$’结束j键盘输入,最后打印出链表内容。

    必备条件:结构体、指针、动态规划、循环语句等

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include  <iostream.h>
    
    typedef struct  Node    /*结点类型定义*/ 
    
    { 	char data;
    
    	struct Node  *next;
    
    }Node, *LinkList;  /* LinkList为结构指针类型*/
    
    LinkList  CreateFromHead()
    
    /*通过键盘输入表中元素值,利用头插法建单链表,并返回该单链表头指针L*/
    
    { 	LinkList   L;
    
    	Node   *s;
    
    	char 	c;
    
    	int 	flag=1;
    
    	L=(LinkList)malloc(sizeof(Node));     /*建立头结点*/
    
    	L->next=NULL;                         /*建立空的单链表L*/
    
    	while(flag)   /* flag初值为1,当输入"$"时,置flag为0,建表结束*/
    
    	{	c=getchar();   
    
    		if(c!='$')
    
    	{s=(Node*)malloc(sizeof(Node)); /*建立新结点s*/
    
    			s->data=c;
    
    			s->next=L->next;/*将s结点插入表头*/
    
    			L->next=s;
    
    		}
    
    		else
    
    			flag=0;
    
    	}
    
    	return L;
    
    }
    
    LinkList  CreateFromHead222()
    
    /*通过键盘输入表中元素值,利用头插法建单链表,并返回该单链表头指针L*/
    
    { 	LinkList   L;
    
    	Node   *s;
    
    	char 	c;
    
    		L=(LinkList)malloc(sizeof(Node));     /*建立头结点*/
    
    	L->next=NULL;                         /*建立空的单链表L*/
    
    	while(c!='#')   /* flag初值为1,当输入"$"时,置flag为0,建表结束*/
    
    	{s=(Node*)malloc(sizeof(Node)); /*建立新结点s*/
    
    			s->data=c;
    
    			s->next=L->next;/*将s结点插入表头*/
    
    			L->next=s;
    
    			c=getchar();
    
    		}
    
    			return L;
    
    }
    
    void main()
    
    {	LinkList l,l2;
    
    	Node *p;
    
    	printf("用头插法建立单链表,请输入链表数据,以$结束!\n");
    
    	l=CreateFromHead();
    
        l2=CreateFromHead222();
    
    	p = l->next;
    
    	while(p!=NULL)
    
    	{	printf("%c%c",p->data,'  ');
    
    		p=p->next;
    
    	}
    
       printf("%c\n");
    
    	p=l2->next;
    
    	while(p!=NULL)
    
    	{
    
    		printf("%c%c",p->data,'  ');
    
         cout<<”  ”<<p->data;
    
    		p=p->next;
    
    	}
    
    }
    

    加油,菜鸟程序员!

    展开全文
  • } printf("创建完成!\n"); } void Display(LinkList &L) { LNode *p; printf("学号 姓名 成绩\n"); for(p=L->next;p!=0;p=p->next) printf("%s %s %d\n",p->data.xh,p->data.xm,p->data.fs); } void Name...
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #define MAXSIZE 100
    using namespace std;
    
    typedef struct
    {
    	char xh[9];  //定义学生学号
    	char xm[20]; //定义学生姓名
    	int fs;      //定义学生分数
    }Student;
    
    typedef Student ElemType;
    
    typedef struct LNode
    {
    	ElemType data;
    	struct LNode *next;
    }LNode,*LinkList;
    
    int InitList(LinkList &L)
    {
    	L=new LNode;
    	L->next=NULL;
    	return 1;
    }
    
    
    void Input(LinkList &L); //添加学生
    void Display(LinkList &L);//显示学生表
    void NameSearch(LinkList &L);//按姓名查找学生
    void PositonSearch(LinkList &L);//按序号查找学生
    void Insert(LinkList &L); //插入学生
    void Del(LinkList &L); //删除学生
    
    
    int main()
    	{
    	    printf("--------------------------功能界面--------------------------\n");
            printf("1.添加学生\t2.显示学生表\t3.按姓名查找学生\n");
            printf("4.按序号查找学生5.插入学生\t6.删除学生信息\t-1.退出\n");
            printf("------------------------------------------------------------\n");
    		LNode *L;
    		InitList(L);
    	    int i;
            printf("输入你要进行操作的相应数字:");
    	    cin>>i;
    	 
    	    while(true)
           {
    	        switch(i)
    	        {
    	        case 1:
    	            Input(L);
                    printf("输入你要进行操作的相应数字:");
    	            cin>>i;
    	            break;
                case 2:
    	            Display(L);
    	            printf("输入你要进行操作的相应数字:");;
    	            cin>>i;
    				break;
    	        case 3:
    	            NameSearch(L);
    	            printf("输入你要进行操作的相应数字:");
                    cin>>i;
    	            break;
                case 4:
    			    PositonSearch(L);
    	            printf( "输入你要进行操作的相应数字:");
    	            cin>>i;
                    break;
    	        case 5:
    	            Insert(L);
    	            printf("输入你要进行操作的相应数字:");
                    cin>>i;
    	            break;
    	        case 6:
    	            Del(L);
    	            printf("输入你要进行操作的相应数字:");
    				cin>>i;
    	            break;
    			default:
    	            if(i <0)
    	                return 0;
    	            else
    	            {
    	                printf("输入数字非法,请重新输入:");
    	                cin>>i;
    	            }
    	            break;
    	        }
    	    }
    }
    
    void Input(LinkList &L)
    {
    	printf("请输入学生人数:");
        int i,j;
    	LNode *p,*q;
    	p=L;
    	cin>>i;
    	for(j=1;j<=i;j++)
           {
    		   printf("请按顺序填写学生的学号,姓名, 成绩:");
    		   q=new LNode;
    		   cin>>q->data.xh>>q->data.xm>>q->data.fs;
    		   q->next=NULL;
    		   p->next=q;
    		   p=q;
    	}
    	printf("创建完成!\n");
    }
    
    void Display(LinkList &L)
    {
    	LNode *p;
    	printf("学号 姓名 成绩\n");
    	for(p=L->next;p!=0;p=p->next)
    	  printf("%s %s %d\n",p->data.xh,p->data.xm,p->data.fs);
    }
    
    void NameSearch(LinkList &L)
    {
    	int i=0;
    	char na[10];
        printf("请输入要查找的姓名:");
    	cin>>na;
    	LNode *p;
    	for(p=L;p!=0;p=p->next)
    	    {
    			if(strcmp(p->data.xm,na)==0)
                 {
    				 printf("学号 %s\n成绩 %d\n",p->data.xh,p->data.fs);
    	             i++;
    			}
    	}
    	if(i==0)
    	    printf("无此人\n");
    }
    
    void PositonSearch(LinkList &L)
    {
    	int i,j,k=0;
        printf("请输入要查找的位置:");
    	cin>>i;
    	LNode *p;
    	p=L->next;
    	if(i<=0)
    		printf("输入位置非法\n");
    	else
    	    {
    			for(j=1;j<i;j++)
    			{
    				if(p)
    		        p=p->next;   
    	        }
    			if(p)
                {
    				printf("学号 %s\n姓名 %s\n成绩 %d\n",p->data.xh,p->data.xm,p->data.fs);
    	            printf("查找完毕!");
    			}
    			else
                    printf("输入位置非法\n");
    	}
    }
    
    void Insert(LinkList &L)
    {
    	int i,j;
    	printf("请输入插入位置:");
    	cin>>i;
    	LNode *p,*q;
    	p=L;
    	if(i<=0)
    	   printf("插入位置非法\n");
    	else
    	    {
    			for(j=1;j<i;j++)
    		       if(p)
    		       p=p->next;
    			if(p)
    	        {
    				printf("请按顺序填写学生的学号,姓名, 成绩:");
    	            q=new LNode;
    	            cin>>q->data.xh>>q->data.xm>>q->data.fs;
    	            q->next=p->next;
    	            p->next=q;
    			}
    			else
                printf("插入位置非法\n");
           }
    }
    
    void Del(LinkList &L)
    {
    	int i,j;
    	printf("请输入删除数据的位置:");
    	cin>>i;
    	LNode *p,*q;
    	p=L;
    	if(i<=0)
    	   printf("删除位置非法\n");
    	else
    	    {
    			for(j=1;j<=i;j++)
    		        if(p)
    		          {
    			        q=p;
    		            p=p->next;
    		          }
    			if(p)
    				 q->next=p->next;
    		    else
    			     printf("删除位置非法\n");
    	       
    	}
    }
    
    展开全文
  • 单链表创建和输出(简单使用)

    千次阅读 2021-01-27 10:11:43
    单链表创建和输出(简单使用) 代码实现 #include<stdio.h> typedef struct Lnode{ int data; struct Lnode*next; }Lnode,*LinkList; //尾插法 void Greate(LinkList &L,int n) { L=new Lnode; //...
  • C++数据结构-单链表创建

    千次阅读 2018-08-22 00:20:25
    前边我们创建了顺序存储结构的线性表,简称顺序表,顺序表最大的问题是:插入和删除需要移动大量的元素。为了解决 这个问题, 我们引入链式存储结构的线性表,简称链表,链表与顺序表不同,链表的每个结点在内存中是...
  • c代码-单链表创建——不带头结点
  • //将struct Node* 定义为LinkList LinkList* CreateLinklist(LinkList* L, int n) //尾插法创建单链表 { LinkList* p; int i; srand(time(0)); // L = new LinkList; L->next = NULL; for (i = 0; i ; i++) { p = ...
  • 用链表创建的学生信息故那里系统,包括添加,删除,修改,查询,统计,排序,等基本操作,本系统用C语言编写。
  • C++ 单链表创建、插入和删除

    万次阅读 多人点赞 2018-09-07 09:11:27
    // 创建单链表 node *creat() { node *head, *p; head = new node; p = head; int x, cycle = 1; while (cycle) { cout ; cin >> x; if (x != 0) { node *s = new node; s->data = x; cout...
  • C语言实现单链表创建、删除、查找、插入

    万次阅读 多人点赞 2018-04-08 22:13:59
    本文将详细的介绍C语言单链表创建、删除、查找、插入以及输出功能一、创建#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef int ElemType; /*结构体部分*/ typedef struct Node { ...
  • 为了操作单链表更加方便,在创建单链表时往往额外添加一个头指针,这个头结点只有指针域,没有数据域,如下图; 下面这图更加清晰的单链表头结点和其他结点的关系: 尾插法创建单链表 //创建...
  • 单链表创建算法

    万次阅读 多人点赞 2016-03-26 23:34:51
    单链表创建算法  当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。  单链表的示意图如下:    Head指针为单链表的头指针,单链表L:L既是单链表的名字,也是其头指针。链表中的最后一个...
  • 5.单链表创建、逆置

    2020-10-28 10:14:18
    # include<iostream> # include<string> using namespace std; typedef int DataType; typedef struct node ...LinkList create_list() { //创建单链表 DataType value[] = { 1,2,3,4,5,6,7,8,9
  • 利用单链表创建多项式,创建的多项式的每一项的第一个元素表示对应项的系数,第二个元素表示对应项的指数,实现多项式的加减乘法运算,以及对多项式根据指数进行递增排序
  • 单链表创建

    千次阅读 2019-10-16 09:27:23
    单链表   线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中的任意一个元素。但在对顺序表进行插入,删除操作时需要对顺序表中的数据元素进行移位操作,降低了效率...
  • 单链表的定义与翻转2021.3.11单链表代码运行结果 单链表 代码 #include <iostream> #include <...Node *CreateLinklist()//尾插法创建 { int n; Node *head; head = (Node*)malloc(sizeof
  • 单链表创建第一步也是最重要的一步就是要创建结构体,怎样创建结构体好理解呢?以下的定义结构体的方式是我看过那么多别人的代码以来让我感觉最容易看懂的,对新手也是很友好的,反正我创建新结点或者是传参只需要...
  • 实现单链表的基本操作,可以作为初学者学习交流使用
  • 单链表创建方法

    2020-11-11 21:17:58
    创建方法的时候如果要改变传入参数的内容时采用*或&都可以 如果对传入的参数不做改变则不需要改动。 这样理解有点难,请看例题。 交换两个数字的值 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,...
  • 单链表创建,插入,删除 1、 以正序或逆序方式动态创建一个单链表,输入数据并验证是否成功; 2、 在原有单链表的基础上,实现在指定位置上对某个数据元素的插入,其中插入位置不限(可以是表头、表尾,也可以是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,045
精华内容 22,018
关键字:

单链表的创建