数据结构-链表-3.7

全在代码里面 case …的用法

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

//循环链表 的增删改查
typedef struct dat  //学生
{
	char name[10];   //名字
	int  num,sex,age;   //分数,0女1男,年龄
	char tel[12];
}s,*S;

typedef struct Node
{
	s data;  //数据域
	S next;  //指针域
}n,*N;

//链表初始化
N list_init()
{
	N p=malloc(sizeof(n));
	if(p == NULL)
	{
		printf("申请内存失败!\n");
		return NULL;
	}
	p->next=p;  //指向本身
	return p;
}

//遍历列表
void list_all(N head)
{
	N p=head;
	char sex_flag[3];
	while(p->next !=head)   //找到尾部的节点
	{
		printf("--------------------\n");
		char* cc= (p->data.sex)==1?"男":"女";   //三目运算  性别的标志
		strcpy(sex_flag,cc);
		printf("姓名:%s\n性别:%s\n学号:%d\n年龄:%d\n电话:%s\n",\
		p->data.name,sex_flag,p->data.num,p->data.age,p->data.tel);
		printf("\n------------------\n\n");
		p=p->next;  //偏移
	}
}

//头插法
int list_insert_head(N head)
{
	s a;
	printf("姓名:");
	scanf("%s",a.name);
	printf("班级:");
	scanf("%d",&a.num);
	printf("性别:");
	scanf("%d",&a.sex);
	printf("年龄:");
	scanf("%d",&a.age);
	printf("电话:");
	scanf("%s",a.tel);
	
	N p=malloc(sizeof(n));
	if(p == NULL)
	{
		printf("申请内存失败!\n");
		return 0;  //插入失败
	}
	*p=*head;  //虚头后移
	
	head->data=a;
	head->next=p;
	return 1;
}

//查找
N list_find(N head)
{
	char a[10];
	printf("请输入要查找的对象姓名:");
	scanf("%s",a);
	N p=head;
	while(p->next != head)
	{
		if(strcmp(p->data.name,a)== 0)
		{
			return p;
		}
		p=p->next;
	}
	printf("没找到!\n");
	return NULL;
}

//删除
int list_delete(N head)
{
	s a[10];
	printf("请输入要删除的对象姓名:");
	scanf("%s",a);
	N p=head;
	while(p->next!=head)
	{
		if(!strcmp(p->data.name,a))   //找出有这个
		{
			N flag_p=head;
			while(flag_p->next !=p)  flag_p=flag_p->next;//找到指向要删除的对象
			flag_p->next=p->next;   //删除
			free(p);
			return 1;
		}
		p=p->next;
	}
	return 0;
}

//修改
int list_change(N head)
{
	s a[10];
	int n;
	printf("请输入要修改的对象姓名:");
	scanf("%s",a);
	N p=head;
	while(p->next !=head)
	{
		if(!strcmp(p->data.name,a))   //找出有这个
		{
			printf("输入1.修改姓名\n2.修改班级\n3.修改性别\n4.修改年龄\n5.修改电话\n");
			scanf("%d",&n);
			switch(n)
			{
				case 1:scanf("%s",p->data.name);break;
				case 2:scanf("%d",p->data.num);break;
				case 3:scanf("%d",p->data.sex);break;
				case 4:scanf("%d",p->data.age);break;
				case 5:scanf("%s",p->data.tel);break;
				default:break;
			}
			return 1;
		}
		p=p->next;
	}
	printf("未找到对象!\n");
	return 0;
}

void main()
{
	system("clear"); 
	N head=list_init();
	int n;
	while(1)
	{
		printf("1.查看\n2.添加\n3.修改\n4.删除\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:list_all(head);break;
			case 2:list_insert_head(head);break;
			case 3:list_change(head);break;
			case 4:list_delete(head);break;
			case 5 ... 10 :system("clear");break;   //输入5到10清屏操作
			default:break;
		}
	}
}

效果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值