顺序表(SList)

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

#define MAXLEN 100

typedef struct{
	char key[10];
	char name[20];
	int age;
}DATA;			//key  name  age 

typedef struct{
	DATA ListData[MAXLEN+1];
	int ListLen;
}SLType;

void SLInit(SLType * SL){		//初始化顺序表
	SL->ListLen=0;
}
int SLLength(SLType *SL){
	return (SL->ListLen);
}
int SLInsert(SLType*SL,int n,DATA data){
	int i;
	if(SL->ListLen>=MAXLEN)
	{
		printf("顺序表已满,不能插入节点!\n");
		return 0;			
	}
	if(n<1||n>SL->ListLen-1){
		printf("插入元素序号错误,不能插入元素!\n");
		return 0;
	}
	for(i=SL->ListLen;i>=n;i--){
		SL->ListData[i+1]=SL->ListData[i];
	}
	SL->ListData[n]=data;
	SL->ListLen++;
	return 1;
}

int SLAdd(SLType*SL,DATA data){
	if(SL->ListLen>=MAXLEN)		//顺序表已满
	{
		printf("顺序表已满,不能在添加节点了!\n");
		return 0;
	}
	SL->ListData[++SL->ListLen]=data;
	return 1;
}

int SLDelete(SLType*SL, int n){
	int i;
	if(n<1||n>SL->ListLen+1){
		printf("删除节点序号错误,不能删除节点!\n");
		return 0;
	}
	for(i=n;i<SL->ListLen;i++){
		SL->ListData[i]=SL->ListData[i+1];
	}
	SL->ListLen--;
	return 1;
}

DATA*SLFindByNum(SLType*SL,int n){
	if(n<1||n>SL->ListLen+1){
		printf("节点序号错误,不能返回节点!\n");
		return NULL;
	}
	return &(SL->ListData[n]);
}

int SLFindByCount(SLType*SL,char *key){
	int i;
	for(i=1;i<=SL->ListLen;i++){
		if(strcmp(SL->ListData[i].key,key)==0){				//strcmp  比较字符串是否相等
			return i;
		}
	}
	return 0;
}

int SLAll(SLType*SL){
	int i;
	for(i=1;i<=SL->ListLen;i++){
		printf("%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
	}
	return 0;
}
int main(){
	int i;
	SLType SL;
	DATA data;
	DATA *pdata;		//定义节点保存指针变量
	char key[10];

	printf("顺序表操作表演!\n");
	SLInit(&SL);
	printf("初始化顺序表完成!\n");

	do{
		printf("输入添加的节点( 学号,姓名, 年龄):");
		fflush(stdin);			//清空输入缓冲区
		scanf("%s%s%d",&data.key,&data.name,&data.age);
		if(data.age){
			if(!SLAdd(&SL,data))
			{
				break;
			}
		}
		else
		{
			break;
		}
	}while(1);
	printf("\n顺序表中的节点顺序为:\n");
	SLAll(&SL);
	
	fflush(stdin);
	printf("\n 要取出节点的序号:");
	scanf("%d",&i);
	pdata=SLFindByNum(&SL,i);
	if(pdata){
		printf("第%d个节点为:(%s,%s,%d)\n",i,pdata->key,pdata->name,pdata->age);
	}
	fflush(stdin);
	printf("\n要查找节点的关键字:");
	scanf("%s",key);
	i=SLFindByCount(&SL,key);
	pdata=SLFindByNum(&SL,i);
	if(pdata)
	{
		printf("第%d个节点为:(%s,%s,%d)\n",i,pdata->key,pdata->name,pdata->age);
	}
	getchar();
	return 0;
}

		

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值