数据结构实验一 顺序表的应用

一、实验目的

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

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

二、实验内容

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

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

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

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

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

三 实验代码

#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;
	SequenceListm mylist;/*建立顺序表*/ 
	int i;
	ListInitialize (&mylist); /*顺序表初始化*/
	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***********顺序表中的数据*************\n");
	printf ("病历号\t\t姓名\t\t年龄\t\t性别\t\t症状\n");
	for (i=0;i<ListLength(mylist);i++)
	{
		ListGet (mylist,i,&s);
		printf ("%s\t\t%s\t\t%d\t\t%s\t\t%s\n",s.number, s. name, s.age, s.sex, s. symptom);
	}
	printf("\n***********查找顺序表中的数据*************\n");
	int qq;
	scanf("%s",s.name );
	qq=ListFind(mylist,s.name );/*查找病人*/ 
	if(qq==-1)
	    printf("无此病人信息!\n");
	else
	{
		ListGet(mylist,qq,&s);
		printf ("病历号\t\t姓名\t\t年龄\t\t性别\t\t症状\n");
		printf ("%s\t\t%s\t\t%d\t\t%s\t\t%s\n",s.number, s. name, s.age, s.sex, s. symptom);
	}
	return 0;
}
头文件
typedef struct
{
	ElemType list[MaxSize];
	int size;
}SequenceListm;
SequenceListm L;
void ListInitialize(SequenceListm *L) 
{
	L->size =0;
}
int ListLength(SequenceListm L)
{
	return L.size ;
}
int ListInsert(SequenceListm *L ,int i,ElemType x)
{
	int j;
	if(L->size>=MaxSize)
	{
		printf("顺序表已满无法插入!\n");
		return 0;
	}
	else if(i<0||i>L->size)
	{
		printf("参数i不合法\n");
		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 ListDelete(SequenceListm *L,int i,ElemType *x)
{
	int j;
	if(L->size <=0)
	{
		printf("顺序表已无数据可删!\n");
		return 0;
	}
	else if(i<0||i>L->size-1)
	{
		printf("参数不合法");
		return 0;
	}
	else
	{
		*x=L->list[i];
		for(j=i+1;j<=L->size -1;j++)	
			L->list[j-1]=L->list[j];
		L->size --;
		return 1;
	}
}
int ListGet(SequenceListm L ,int i,ElemType *x)
{
	if(i<0||i>L.size-1)
	{
		printf("参数i不合法!\n");
		return 0;
	}
	else
	{
		*x=L.list[i];
		return 1;
	}
}
int ListFind(SequenceListm L,char *x)
{
	int i,a=-1;
	for(i=0;i<=L.size;i++ )
	{
		if( strcmp(L.list [i].name,x)==0)
		{
	        a=i ;
			return a;  
	    }
	}
	if(a==-1)
	  return -1;  
}

四 实验结果

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐