ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构(C语言)--链表

2021-12-30 23:32:01  阅读:131  来源: 互联网

标签:struct -- next 链表 strcpy student printf C语言 name


线性表的链式实现


主要内容:

包含链表的创建、增、删、改、查操作

代码实现:

以下学生信息为例实现代码


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct student *create(struct student *);//创建链表      
void  name_found(struct student *);      //根据姓名进行查找,返回此学生的学号和成绩 
void  position_found(struct student *);  //根据指定的位置可返回相应的学生信息(学号,姓名) 
void  insert_position(struct student*);  //给定一个学生信息,插入到表中指定的位置
void  del_position(struct student*);     //删除指定位置的学生记录
void  statistic_student(struct student*);//统计表中学生个数

struct student
{
	char  num[14];     //学号
	char  name[20];    //姓名
	int   sex;         //性别
	char  tel[14];     //联系电话
	char  qq[12];      //QQ号
	struct student *next;
}; 

int main()
{
	struct student *head=NULL,*p,*p1; 
	head=create(head);
	p=head;
	while(p!=NULL)
	{
		printf("%10s%10d%15s%15s%10s\n",p->name,p->sex,p->num,p->tel,p->qq);//打印链表信息 
		p=p->next;
	}
    printf("\n");
    printf("根据姓名查找输出赵括的信息\n");
    name_found(head);
    printf("\n");
    printf("输出指定位置信息第二位同学的信息\n");
    position_found(head);                                              //输出指定位置的信息 
    printf("\n");
    printf("将刘刚的信息插入到第二位后:\n"); 
    insert_position(head);
    printf("\n");
    printf("删除第三位同学的信息后:\n");
    del_position(head);
    printf("\n");
    statistic_student(head);
    printf("\n");
	return 0;
}

struct student *create(struct student * head)
{
	struct student *p1,*p2,*p3,*p4;
	
	p1=(struct student *)malloc(sizeof(struct student));       //信息1 
	strcpy(p1->name,"李思"  );
	p1->sex=0;
	strcpy(p1->num,"2013002");
	strcpy(p1->tel,"13910121978");
	strcpy(p1->qq,"8796532");
	p1->next=NULL;
    
	p2=(struct student *)malloc(sizeof(struct student));       //信息2 
	strcpy(p2->name,"陈琪");
	p2->sex=1;
	strcpy(p2->num,"2013003");
	strcpy(p2->tel,"13789450012");
	strcpy(p2->qq,"3789123");
	p2->next=NULL;
	
	p3=(struct student *)malloc(sizeof(struct student));       //信息3 
	strcpy(p3->name,"王强");
	p3->sex=0;
	strcpy(p3->num,"2013004");
	strcpy(p3->tel,"13634567856");
	strcpy(p3->qq,"6543783");
	p3->next=NULL;
	
	p4=(struct student *)malloc(sizeof(struct student));       //信息4
	strcpy(p4->name,"赵括");
	p4->sex=1;
	strcpy(p4->num,"2013005");
	strcpy(p4->tel,"13534408976");
	strcpy(p4->qq,"5679");
	p4->next=NULL;
	
	head=p1; 
	p1->next=p2;
	p2->next=p3;
	p3->next=p4;
	p4->next=NULL;
	return head;
}

void name_found(struct student *r)          //根据姓名进行查找,返回此学生的学号和成绩  
{
	struct student *q;
	q=r;
	char name[20]="赵括"; 
	//scanf("%s",&name);
	while(q!=NULL)
	{
		if(strcmp(q->name,name)==0) 
		{
		printf("%10s%15s%15s\n",q->name,q->num,q->tel);break;
     	}
    	q=q->next;
	}
}

void  position_found(struct student *a)      //根据指定的位置可返回相应的学生信息(学号,姓名) 
{
	struct student *b;
	int m=2;
    //scanf("%d",&m);
	int i=0;
	b=a;
	while(b!=NULL)
	{
     i++;
     while(i==m)
     {
     	printf("%10s%15s\n",b->name,b->num);break;
	 }
	 b=b->next;
	}
}
void  insert_position(struct student *pa)     //给定一个学生信息,插入到表中指定的位置
{
	struct student *pb,*pc;
	int i=1;
	int n=2;                                  //将刘刚的信息插入到第2个 
	//printf("请输入插入的点"); 
	//scanf("%d",&n);
	pb=pa;
	while(pb!=NULL&&i<n-1)
	{
		i++;
		pb=pb->next;
	}
     pc=(struct student *)malloc(sizeof(struct student));
     strcpy(pc->name,"刘刚");
     pc->sex=1;
     strcpy(pc->num,"2013006");
     strcpy(pc->tel,"13386543211");
     strcpy(pc->qq,"98315");
     
	 pc->next=pb->next;
     pb->next=pc;
     //pb=pa;
     while(pb!=NULL)
	{
		printf("%10s%10d%15s%15s%10s\n",pb->name,pb->sex,pb->num,pb->tel,pb->qq);   //打印链表信息 
		pb=pb->next;
	}
}
void  del_position(struct student *t)
 {
 	struct student *l,*k;
 	int i=1;
 	int n=3;
	 //printf("请输入想删除的点");
	 //scanf("%d",&n);                                                //删除第3位同学的信息 
 	l=t;
 	while(l!=NULL&&i<n-1)
 	{
 		l=l->next;
 		i++;
	 }
	 k=l->next;
	 l->next=k->next;
	 free(k);
	 l=t;
	 while(l!=NULL)
	{
		printf("%10s%10d%15s%15s%10s\n",l->name,l->sex,l->num,l->tel,l->qq);   //打印链表信息 
		l=l->next;
	}
 }
void  statistic_student(struct student*y)    //统计表中学生个数
 {
 	int i=0;
 	struct student *x;
 	x=y;
 	while(x!=NULL)
 	{
 		i++;
 		x=x->next;
	 }
	 printf("学生总数为:%d\n",i);
 }
 

标签:struct,--,next,链表,strcpy,student,printf,C语言,name
来源: https://blog.csdn.net/qq_45569194/article/details/122247129

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有