链表的创建与打印

  • 链表
    链表的创建与打印
#include<stdio.h>
#include<stdlib.h>
typedef struct student{
	char name[8];
	char num[10];
	int score;
	struct student *next;
}NODE;       //将struct student 结构类型定义为新的类型名NODE 
				//(我得理解是,链表是一种特殊的结构,就是形如 NODE 一样的结构体,所以用NODE表示这种特殊的结构) 
int main()
{
	 
	NODE *head;      //变量声明,定义 一个NODE结构类型的指针变量head 
	NODE *creat();   // creat函数原型申明 ,返回值类型为NODE结构指针 (该函数实现链表的创建) 
	void display(NODE*); // display 函数原型申明,形参为NODE结构指针,返回值为空 (该函数实现链表的打印) 
	
	head=creat();     //创建链表 
	display(head);    //打印链表 
	return 0;	
} 

//定义函数

NODE *creat()    
{
	NODE *head, *p, *s;   //声明三个NODE类型的指针 ,head头指针,p可以看作尾指针,s可以看作节点指针 
	int key=1,n;          //n表示链表的节点个数 
	char k[3],grad[3];    // 
	
	head=(NODE*)malloc(sizeof(NODE));  //给头指针动态分配内存地址 
	p=head;                            // 
	while(key)
	{
		printf("\nEnter serial number:");
		gets(k);
		n=atoi(k);  //类型转换成int,给n赋值 
		if(n!=0)
		{
			s=(NODE*)malloc(sizeof(NODE));  //给节点指针动态分配内存地址 
			printf("\nEnter name %d:",n);
			gets(s->name);                //给数据段赋值 
			printf("\nEnter num %d:",n);
			gets(s->num);
			printf("\nEnter grad %d:",n);
			gets(grad);
			s->score=atoi(grad);
			p->next=s;    //尾指针next指向节点的首地址 
			p=s;   // 新节点s成为新的尾指针 
		}
		else
		key=0;
	}
	head=head->next;   //head只保留指针段的地址 
	p->next=NULL;  // 末尾指针指向空地址 
	return(head);
 } 
 //链表打印 
 void display(NODE *head)
 {
 	NODE *p;
 	p=head;
 	printf("\nChain is:");
 	if(head!=NULL)
 		do{
 			printf("\n%s %s %d",p->name,p->num,p->score);
 			p=p->next;
		 }while(p!=NULL);
  } 

在这里插入图片描述

  • 用尾插法建立带头结点的单链表
  1. 调用malloc函数,生成一个头结点head,同时让尾指针s=head;
  2. 调用malloc函数,建立新的节点p;
  3. 给新节点的数据域data赋值,将新节点的指针域设置为空;
  4. 将新节点链接到链表的尾节点s之后,修改尾指针是s;
  5. 重复上述步骤2~4,直至输入结束标志0尾止;
#include<stdio.h>
#include<stdlib.h>
typedef struct  linklist{
	int data;
	struct linklist *next;
}node;                 //定义链表结构 

int main()
{
	node *head;
	node *creat();	
	void display(node*);
	head=creat();
	display(head);
	return 0;
}

//链表创建 
node *creat()
{
	node *head,*p,*s;
	int data;
	printf("input a int number to start:");
	scanf("%d",&data);
	head=(node*)malloc(sizeof(node));
	s=head;
	while(data){
		p=(node*)malloc(sizeof(node));
		printf("input a int number to linklist:");
		scanf("%d",&data);
		p->data=data;
		s->next=p;
		s=p;				
}
//	head=head->next;
	s->next=NULL;
	return(head);
}


//链表打印 
 void display(node *head)
 {
 	node *p;
 	p=head->next;
 	printf("\nChain is:");
 	if(head!=NULL)
 		do{
 			printf("\n%d",p->data);
 			p=p->next;
		 }while(p!=NULL);
  } 

在这里插入图片描述

  • 用头插法建立带头结点的单链表
  1. 调用malloc函数,生成一个头结点head,将head指针域置空;
  2. 调用malloc函数,建立新的节点p;
  3. 给新节点的数据域data赋值,将新节点的指针域指向head所指的节点;
  4. 将链表头结点head的指针域修改为新节点p;
  5. 重复上述步骤2~4,直至输入结束标志0尾止;`
#include<stdio.h>
#include<stdlib.h>
typedef struct  linklist{
	int data;
	struct linklist *next;
}node;                 //定义链表结构 

int main()
{
	node *head;
	node *creat();	
	void display(node*);
	head=creat();
	display(head);
	return 0;
}

//链表创建 
node *creat()
{
	node *head,*p;
	int data;
	printf("input a int number to linklist:");
	scanf("%d",&data);
	head=(node*)malloc(sizeof(node));
	head->next=NULL;
	while(data){
		p=(node*)malloc(sizeof(node));
		p->data=data;
		p->next=head->next;
		head->next=p;
		printf("input a int number to linklist:");
		scanf("%d",&data);				
}
	return(head);
}


//链表打印 
 void display(node *head)
 {
 	node *p;
 	p=head->next;
 	printf("\nChain is:");
 	if(head!=NULL)
 		do{
 			printf("\n%d",p->data);
 			p=p->next;
		 }while(p!=NULL);
  } 

在这里插入图片描述

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值