数据结构实验一

一、实验目的

1、掌握建立顺序表的基本方法。

2、掌握顺序表的插入、删除算法的思想和实现,并能灵活运用

二、实验内容

    用顺序表实现病历信息的管理与查询功能。具体要求如下:

1. 利用教材中定义顺序表类型存储病人病历信息(病历号,姓名,症状);要求使用头文件。

2.设计顺序表定位查找算法,写成一个函数,完成的功能为:在线性表L中查找数据元素x,如果存在则返回线性表中和x值相等的第1个数据元素的序号;如果不存在,则返回-1。

    函数定义为 int ListFind(SequenceList L,char *x)

请在主函数中测试查找是否存在姓名为x的病人,并根据返回的序号打印出病人信息。

头文件
typedef struct
 {
 	ElemType list[MaxSize];
 	int size;
 }SequenceList;
 
 int ListFind(SequenceList L,const char *x)
 {
 	int i;
	for(i=0;i<L.size-1;i++)
	{
		if(!strcmp(L.list[i].name,x))
			return i;		
	} 
	return -1;
 }
 
 int ListInitialize(SequenceList *L)
 {
 	L->size = 0;
 }
 
 int ListGet(SequenceList L,int i,ElemType *x)
 {
 	if( i < 0 || i > L.size-1)
 	{
 		printf("查无此人\n");
 		return 0;
 	}
 	 if (i == L.size - 1)
        return -1;
 }
 
 int ListInsert(SequenceList *L,int i, ElemType x)
 {
 	int j;
 	if(L->size >= MaxSize)
 	{
 		printf("顺序表已满\n");
 		return 0;
 	}
 	else if (i<0 || i>L->size)
 	{
 		printf("不合法");
 		return 0;
 	}
 	else
 	{
 		for(j=L->size;j>i;j--)
 			L->list[j]=L->list[j-1];
 		L->list[i]=x;
 		L->size ++;
 		return 1;
 	}
 }
 int ListLength(SequenceList L)
 {
 	return L.size;
 }

源代码
#include<stdio.h>
#include<string.h>
#define MaxSize 100
#define N 2
typedef struct
{
	char number[5];
	char name[20];
	int age;
	char sex[5];
	char symptom[50];
}patient;

typedef patient ElemType;
#include"SequenceList.h"

int main()
{
	patient s;
	SequenceList mylist;
	int i;
	ListInitialize(&mylist);
	char n[10];
	int t;
	
	for(i=0;i<N;i++)
	{
		printf("输入第%d个病人的信息:\n",i+1);
		printf("输入第%d个病人的病历号:",i+1);
		scanf("%s",s.number);
		printf("输入第%d个病人的姓名:",i+1);
		scanf("%s",s.name);
		printf("输入第%d个病人的年龄:",i+1);
		scanf("%d",&s.age);
		printf("输入第%d个病人的性别:",i+1);
		scanf("%s",s.sex);
		printf("输入第%d个病人的症状:",i+1);
		scanf("%s",s.symptom);
		ListInsert(&mylist,i,s); 
	}
	
	printf("输入查找的病人的名字:\n");
	scanf("%s",&n);
	t=ListFind(mylist,n);
	printf("*****************************\n");
	
	ListGet(mylist,t,&s);
if(!t==-1)
	printf("%s %s %d %s %s\n",s.number,s.name,s.age,s.sex,s.symptom);
	
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值