数据与结构之顺序表的实现

#include<stdio.h>
#define Size 5
#include<stdlib.h> 
typedef struct one{
	int *head;    //声明一个动态数组 (数组长度不确定) 
	int length;  //声明数组的长度 
	int size;    //声明数组占用的空间大小 
}T;
//定义一个函数来初始化结构体 
 T initialize()
 {
 	
 	T t;
 	t.head=(int*)malloc(Size*sizeof(int));//为结构体变量t中的动态数组分配空间 
 	if(!t.head)      //如果分配失败,输出提示 
 	{
 		printf("初始化失败!!!");
      exit(0);
	 }
	t.length=0;   //初始化长度为零 
	t.size=Size;     //初始化占用内存为零 
	return t;    //返回结构体变量t 
 }
 //定义一个函数来输出结构体变量t中的动态数组的值 
 void  output(T t)     //输出函数,将动态数组中的元素输出 
 {
 	for(int i=0;i<t.length;i++)       
 	{
 		printf("%d\t",t.head[i]);   //输出元素值 
	 }
	 printf("\n");      
 }
 //定义一个函数来删除结构体变量t中的动态数组元素 
 T Delete(T t,int num){
 	if(num>t.length||num<1) //检查要删除的元素位置是否符合动态数组的长度 
	 {
	 	printf("删除的元素的位置错误!!!\n");
	    exit(0); 
	  } 
	  //删除操作 
	  for(int i=num-1;i<t.length-1;i++)
	  {
	  	t.head[i]=t.head[i+1];
	   } 
	   t.length--;
	   return t;
 } 
 //定义一个的函数来插入元素
 T Insert(T t,int num2,int weizhi)
 {
 	if(weizhi>t.length+1||weizhi<0)
 	{
 		printf("插入的位置有问题!!!");
 		return t;
	 }
 	if(t.length>=t.size)
 	{
 		t.head=(int*)realloc(t.head,(Size+1)*sizeof(int));
 		if(!t.head)
 		{
 			printf("存储分配失败!!!");
			 return t; 
		}
		t.size+=1;
	 }
	 for(int i=t.length-1;i>=weizhi;i--)
	 {
	 	t.head[i+1]=t.head[i];
	 }
	 t.head[weizhi]=num2;
	 t.length++;
	 return t;
 }
 //定义一个函数,来查询元素的位置。 
 int select(T t,int yuansu)
 {
	 for(int i=0;i<t.length;i++)
	 {
	 	if(t.head[i]==yuansu)
	 	{
	 	 return i;
		 }
	 }
	 return -1;
 }
 //定义一个函数来更改元素 
 T change(T t,int yuanshu2,int yuanshu3)
 {
 	int A=select(t,yuanshu2);
	 t.head[A] =yuanshu3;
	  return t;
 }
main()
{
	T t=initialize();  //初始化结构体变量t 
	printf("动态数组中的元素为:\n"); 
	for(int i=1;i<=Size;i++)   //为动态数组赋值 
	{
		t.head[i-1]=i;    
		t.length++;
		t.size++; 
	}
	output(t);  //调用output()函数输出结构体t中的动态数组的值 
	printf("请输入要删除的元素:\n");
	int  num;
	scanf("%d",&num); 
	t=Delete(t,num);
	printf("删除元素后的动态数组中的值为:\n");
	output(t);
	printf("请输入要插入的元素,和位置:\n");
	int num2,weizhi;
	scanf("%d%d",&num2,&weizhi);
	t=Insert(t,num2,weizhi);
	printf("插入元素后的动态数组中的值为:\n");
	output(t); 
	printf("请输入要查询的元素:\n");
	int  yuansu;
	scanf("%d",&yuansu);
	printf("查询元素的位置为:\n%d",select(t,yuansu));
	printf("\n请输入更改的元素和更改值\n");
	int yuanshu2,yuanshu3;
	scanf("%d%d",&yuanshu2,&yuanshu3);
	change(t,yuanshu2,yuanshu3);
	printf("更改后的动态数组元素为:\n");
	output(t); 	
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值