C语言学习——顺序表

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

#define MAXSIZE 100                                  //定义顺序表的最大长度

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

typedef struct                                      
{
	DATA ListData[MAXSIZE];
	int ListLen;
} SeqListType;

void SeqListInit(SeqListType *SL);                    //初始化顺序表
int  SeqListLength(SeqListType *SL);                  //返回顺序表的元素数量
int  SeqListAdd(SeqListType *SL,DATA data);           //向顺序表中添加元素
int  SeqListInsert(SeqListType *SL,DATA data,int n);  //向顺序表中插入元素
int  SeqListDelete(SeqListType *SL,int n);            //删除顺序表中的元素
DATA *SeqListFindByNum(SeqListType *SL,int n);        //按序号返回元素
int SeqListFindByCont(SeqListType *SL,char *key);     //按关键字查找
int SeqListAll(SeqListType *SL);                      //遍历顺序表中的内容

void SeqListInit(SeqListType *SL)                     //初始化顺序表
{
	SL->ListLen=0;                                    //初始化,设置长度为0
}

int  SeqListLength(SeqListType *SL)                   //返回顺序表元素数量
{
	return (SL->ListLen);
}

int  SeqListAdd(SeqListType *SL,DATA data)            //增加节点到顺序表尾部
{
	if(SL->ListLen>=MAXSIZE)
	{
		printf("顺序表已满不再添加节点!");
		return 0;
	}

	SL->ListData[SL->ListLen]=data;                   //保存数据到顺序表最后
	SL->ListLen++;
	return 1;
}

int  SeqListInsert(SeqListType *SL,DATA data,int n)   //插入节点到顺序表
{
	int i;

	if(SL->ListLen>=MAXSIZE)
	{
		printf("顺序表已满不再添加节点!");
		return 0;
	}
	
	if(n<1 || n>SL->ListLen-1)
	{
		printf("插入节点序号错误,不能插入节点!");
		return 0;
	}

	for(i=SL->ListLen;i>n;i--)
	{
		SL->ListData[i]=SL->ListData[i-1];
	}

	SL->ListData[n]=data;
	SL->ListLen++;

	return 1;
}

int  SeqListDelete(SeqListType *SL,int n)             //删除节点
{
	int i;
	if(n<1 || n>SL->ListLen-1)
	{
		printf("删除节点错误,无该节点!");
		return 0;
	}
	for(i=n;i<SL->ListLen;i++)
	{
		SL->ListData[n-1]=SL->ListData[n];
	}

	SL->ListLen--;
	return 1;
}

DATA *SeqListFindByNum(SeqListType *SL,int n)         //按序号查找节点
{
	if(n<0 || n>SL->ListLen)
	{
		printf("无此数据项!");
		return 0;
	}

	return &(SL->ListData[n]);
}

int SeqListFindByCont(SeqListType *SL,char *key)      //按关键字查找节点
{
	int i;
	for(i=0;i<SL->ListLen;i++)
	{
		if(strcmp(SL->ListData[i].key,key)==0)
			return i;
	}

	return 0;
}

int SeqListAll(SeqListType *SL)
{
	int i;
	for(i=0;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;
	SeqListType SL;
	DATA data,*data1;
	char key[15];

	SeqListInit(&SL);                         //初始化顺序表

	do
	{
		printf("输入添加的节点(学号,姓名,年龄)");
		fflush(stdin);                        //清空缓冲区
		scanf("%s%s%d",&data.key,&data.name,&data.age);
		if(data.age)
		{
			if(!SeqListAdd(&SL,data)) break;
		}

		else break;
	}while(1);

	printf("\n顺序表的节点顺序为:\n");
	SeqListAll(&SL);

	fflush(stdin);
	printf("\n要取出节点的序号:");
	scanf("%d",&i);
	data1=SeqListFindByNum(&SL,i);
	if(data1)
		printf("第%d个节点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);

	fflush(stdin);
	printf("\n要查找节点的关键字:");
	scanf("%s",key);
	i=SeqListFindByCont(&SL,key);
	data1=SeqListFindByNum(&SL,i);
	if(data1)
		printf("第%d个节点为:(%s,%s,%d)\n",i+1,data1->key,data1->name,data1->age);
	getch();

	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值