线性表--顺序表c语言的基本应用代码

线性表的定义:线性表是最基本、最简单、也是最常用的一种数据结构。表头具有唯一一个直接后继,表尾有唯一一个直接前驱,表中的元素存在唯一的直接前驱和直接后继。是一对一的关系

从数学角度来讲,树结构和散结构都是图的特例,表结构又是树的特例 (运用到离散数学的知识)
无回路的连通图就是树
散结构就是对应的只含有顶点而没有边的“空图”;
线性表也可以看作是“一元树”;

线性表静态时可以理解为数组,动态时可以看作是链表
例如利用数组a[20]利用线性表定义后一个变量就可以表示与a[20]相同的数组
下面是顺序表插入,删除,查找和合并的代码
首先是定义一个顺序表,利用到结构体

#define Elemtype int 		//可以用Elemtype代替int
#define maxsize 100
typedef struct stu
{
	Elemtype elem[maxsize];	
	int last;		//代表顺序表的长度
}Seqlist;

查找代码

int seek(Seqlist *l,Elemtype e)		//查找 
{int i;
	for(i=0;i<=l->last ;i++)
		if(l->elem [i]==e)
			return i+1;		//找到返回序号,找不到返回-1
	return -1;
}

插入代码

void insert(Seqlist *l,int j,Elemtype e)		//插入,j是插入位置,e是要插入的元素,Elemtype可代替int
{	
	if(j<=-1||j>l->last+2)
		{printf("数组越界不能插入\n");
		return ;
		}
	int x,i;
	for(i=l->last;i>=j-1;i--)
		l->elem[i+1]=l->elem[i];		//将l.elem[i]和以后的元素全部往后移动一位,然后将要插入的元素放到相应位置上,最后让线性表的长度加1
	l->elem[j-1]=e;
	l->last++;
}

删除代码

void delete1(Seqlist *l,Elemtype i)		//删除 
{int j;
	if(i<=-1||i>=100)
		{printf("数组越界不能进行删除操作\n");
		return ;
		}
	for(j=i-1;j<=l->last ;j++)
		l->elem [j]=l->elem [j+1];		//与插入相似,最后顺序表表的长度减一
	l->last--;
 } 

合并代码

void merge(SeqList *LA,  SeqList *LB,  SeqList *LC)
{
	int i,j,k;
	i=0;j=0;k=0;
	while(i<=LA->last&&j<=LB->last)		//当两顺序表表中都有元素时,根据需求进行比较,取值,当去LA的值时,LB所指向的指针不变,与LA的下一位比较,同理可得去LB时
		if(LA->elem[i]<=LB->elem[j])
		{
			LC->elem[k]= LA->elem[i];
			i++; 
			k++;
		}
		else
		{
			LC->elem[k]=LB->elem[j];
			j++; 
			k++;
        }
	while(i<=LA->last)	/*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/
	{
		LC->elem[k]= LA->elem[i];
		i++; 
		k++;
	}
	while(j<=LB->last)  /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/	
	{
		LC->elem[k]= LB->elem[j];
		j++; 
		k++;
	}
	LC->last=LA->last+LB->last+1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@玉面小蛟龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值