数据结构-线性表基础练习

数据结构 线性表的增删查改以及顺序表的合并。

//线性表的顺序存储 **增删查改** 
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define maxsize 100 //线性表可能达到的最大长度
typedef struct
{
	int elem[maxsize];
	int length;
}SeqList;

void Init_SeqList(SeqList *L);//顺序表的初始化,构造一个空表,length设为0
int Insert_SeqList(SeqList *L,int i,int x);//顺序表的插入 
int Delete_SeqList(SeqList *L,int i,int *e);//顺序表的删除 
int Location_SeqList(SeqList *L,int x);//顺序表中按值查找 
void merge(SeqList *A,SeqList *B,SeqList *C); //顺序表的合并 

void Init_SeqList(SeqList *L)
{
	L->length = 0;
}
int Insert_SeqList(SeqList *L,int i,int x) //顺序表的插入 ,i为插入的位置,x为置入的数据 
{
	int j;
	if(L->length==maxsize-1)
	{
		printf("表满!");
		return OVERFLOW;//运算过程中出现了上溢,退出程序并报错给主调进程。 
	 } 
	if(i<1||i>L->length+1) 
	{
		printf("位置错!"); 
		return false;
	}
	for(j=L->length;j>=i;j--)  //将i的值赋给i+1,空出位置i插入新数据x。 
	    L->elem[j+1] = L->elem[j];
	L->elem[i] = x;
	L->length ++;    
	return true;
}

int Delete_SeqList(SeqList *L,int i,int *e) //顺序表的删除 , i为待删除的元素 
{
	int j;
	if(i<1||i>L->length) //检查空表及删除位置的合理性 
	{
		printf("不存在第i个元素!");
		return false;
	 } 
	 *e = L->elem[i];  //用 指针e存储待删除的指针
	 for(j=i;j<L->length;j++)  //将i后面的数据向前移动 
	     L->elem[j] = L->elem[j+1];
	L->length --;
	return 	true;  
}

int Location_SeqList(SeqList *L,int x) //顺序表中按值查找,x为待查找的值 
{
	int i = 1;
	while(i<=L->length&&L->elem[i]!=x)
	      i++;
	if(i>L->length)
	   return false; //查找失败,没有找到与x对应的位置 
	else
	   return i; //返回x的存储位置   	   
}

void merge(SeqList *A,SeqList *B,SeqList *C) //顺序表的合并,
{
	int i,j,k;
	i = 1; j = 1; k =1;
	wile(i<=A->length&&j<=B->length)
	{
		if(A->elem[i]>=B->elem[j])
		   C->elem[k++] = B->elem[j++];
		else
		   C->elem[k++] = A->elem[i++];   
	 } 
	 while(i<=A->length) //此时B顺序表已经处理完,依次放入A顺序表即可。 
	       C->elem[K++] = A->elem[i++];
	 while(j<=B->length)
	       C->elem[k++] = B->elem[j++];
     C->length = A->length + B->length;      
 } 

int main()
{
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值