c语言-单链表

先看实操

#include <stdlib.h>
#include <stdio.h>
typedef struct student{
	char number[99];
	char name[99];
	struct student *next;
}stu;
	stu *head=NULL;//头指针 
	stu *end=NULL;//尾指针 
void add(){
	stu *ap;
	ap=(stu *)malloc(sizeof(stu));//这里创建节点
	printf("输入学号和姓名"); 
	scanf("%s",ap->name);
	scanf("%s",ap->number);
	ap->next=NULL;
	if(head==NULL){//先进行判断
		head=ap;
		end=ap;
	}
	else {
		end->next=ap;
		end=ap;
	}
}
int main(){
	printf("是否添加学生(1添加,2否):");
	int a;
	scanf("%d",&a);
	if(a==1){
		add();
	}
}

这里用到的是尾插法,及在尾指针上面进行操作。

添加的原理
1.先定义头指针和尾指针来确定链表的位置(全局变量来定义更好操作)
2.然后添加一个元素进来,就使尾指针的next指针域指向这个节点(首先判断这个链表是否有元素,不然的话头尾都是空指针)
3.这里需要注意,两个指针之间使用“ a=b ”时,那么a和b存放的地址相同,及对end操作的时候就是在对最后一个元素进行操作。
使用方法
1.比如查找链表中某一个元素时

void fundname(){
	char a[999];     //这里假设按姓名去查找链表中的元素
	int flag=0;
	printf("请输入姓名:");
	scanf("%s",a);
	stu *ap=head;     //这里不能直接用head头指针,因为下面会改变这个,但是头指针不能变。
	 while(ap!=NULL){   //这里只要不是最后一个元素都要进行检查
	 	if(strcmp(ap->name,a)==0){   //这里进行比较,倘若相同就进行下一步
	 	printf("学生的信息为:\n");  
	 	printf("学号为%s\n",ap->number);
		flag=1;
	 }
	 	ap=ap->next;   //这里是对下一个元素进行检查。
	 }
	 if(flag==0){
	 	printf("没有查询到学生信息\n");
	 }
}

就是从头指针进行挨个查找。

进行删除

void delete(){
	stu *ap=head;
	stu *tmp=NULL;
	printf("请输入要删除的学生的学号:");  //这里假设进行学号删除
	char dnumber[99];
	scanf("%s",dnumber);
	while(ap!=NULL){
		if(strcmp(ap->number,dnumber)==0){
			tmp->next=ap->next; //原本的tmp是现在ap的前一个,那么本来tmp->next=ap,现在tmp->next=ap->next,所以ap被覆盖
			break;
		}
		tmp=ap;  //记录每一次*ap变换前的位置 
		ap=ap->next;
	}
	printf("删除成功\n");
}

主要原理就是要进行覆盖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值