C语言实现线性表

#include<stdio.h>
#include<stdlib.h>
#define InitSize 200
typedef struct 
{    
	int data[InitSize];    //线性表数据
    	int length;            //线性表长度
}SeqList;
    	void InitList(SeqList *L);              //新建一个线性表
    	int ListEmpty(SeqList L);               //判断线性表是否为空
    	int GetElem(SeqList L,int i,int *e);    //按序号查找元素,查找成功返回给e
    	int GetLoc(SeqList L,int e);            //按元素查找序号
    	int InsertList(SeqList *L,int i,int e); //插入
    	int DeleteList(SeqList *L,int i,int *e);//删除
    	int ListLength(SeqList L);              //输出表长
    	void ClearList(SeqList *L);             //清除线性表
int main()
{    
	SeqList L;
    	int num;
        int len;
      	InitList(&L);
        printf("输入线性表长度:\n");
        scanf("%d",&len);    
    	printf("输入线性表数据:\n");
    	for (int i = 1; i <= len; i++)    
    	{        
    		scanf("%d",&num);        
    		InsertList(&L,i,num);    
    	}    
    	printf("输出线性表数据:\n");    
    	for (int i = 0; i < L.length; i++)    
    	{        
    		printf("%d\n",L.data[i]);    
    	}           
    	system("pause");    
    	return 0;
}

void InitList(SeqList *L)
{    
	L->length=0;                 //初始化表长度
}

int ListEmpty(SeqList L)
{    
	if (L.length==0)             //判断线性表是否为空,是返回1不是返回0    
	{        
		return 1;    
	}else    
	{        
		return 0;    
	}        
}

int GetElem(SeqList L,int i, int *e)  //按照位置查找数据并返回数据的值
{    
	if (i<1||i>L.length)    
	{        
		return -1;            //无法查找返回-1
	}else    
	{        
		*e=L.data[i-1];       //用e返回查找的值
	}        
}
 
int GetLoc(SeqList L,int e)           //按照值查找位置
{    
	for (int i = 0; i < L.length; i++)    
	{        
		if (L.data[i]==e)        
		{            
		return i+1;        
		}    
	}
    	return 0;
}

int InsertList(SeqList *L,int i,int e) //插入元素,能插入返回1
{    
	if (i<1||i>L->length+1)        //判断位置是否在范围中    
	{        
		printf("插入位置不合法");        
		return -1;    
	}else if (L->length>=InitSize) //判断顺序表是否满了
	{        
		printf("顺序表已经满了,不能再插入元素");        
		return 0;    
	}else    
	{        
		for (int j = L->length; j >= i; j--)        
		{            
			L->data[j]=L->data[j-1];        
		}        
		L->data[i-1]=e;        
		L->length++;        
		return 1;    
	}                
}

int DeleteList(SeqList *L,int i,int *e) //删除
{    
	if (L->length<=0)    
	{        
		printf("顺序表已空,无法删除");        
		return -1;    
	}else if (i<1||i>L->length)    
	{        
		printf("该位置无法删除");        
		return -1;    
	}else    
	{        
		*e=L->data[i-1];        
		for (int j = i; j <= L->length-1; j++)        
		{            
			L->data[j-1]=L->data[j];            
			L->length--;            
			return 1;        
		}            
	}            
}

int ListLength(SeqList L)              //返回线性表长度
{    
	return L.length;
}

void ClearList(SeqList *L)             //清除线性表
{    
	L->length=0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值