线性表之顺序存储

顺序表的存储结构

# define MAXSIZE 10
typedef int ElemType;
typedef struct LNode{
	ElemType data[MAXSIZE];
	int length;
}Node;

顺序表的基本运算

  1. 顺序表的初始化
void init(Node* List)
{
	List->length=0;
}
  1. 顺序表的添加(末尾添加)
void add(Node* List,ElemType value) 
{
	
	int i=0;
	while(List&&i<List->length)
		i++;
	List->data[i]=value;
	List->length++;
}
  1. 顺序表的插入(在第x的位置插入值为value的元素)
void insert(Node* List,int x,ElemType value)
{
	if(List->length>MAXSIZE)	printf("表已满!\n");	
	if(x<0 && x>List->length)	printf("要插入的的位置错误!\n");
	int i=List->length;
	while(i>=0 && i!=x)
	{
		List->data[i]=List->data[i-1];
		i--;
		List->length++;
	}
	List->data[i]=value;
	
}
  1. 顺序表的查找(按值查找,查找值为value的元素)
int find(Node* List,ElemType value)
{
	int i=0;
	while(i<List->length && List->data[i]!=value)
		i++;
	if(i>=List->length)	return -1;
	return i;
}
  1. 顺序表的删除(删除第x位元素)
void del(Node* List,int x)
{
	int i=x;
	while(i<List->length)
	{
		List->data[i]=List->data[i+1];
		i++;
	}
	List->length--;
}
  1. 输出顺序表
void print(Node* List)
{
	int i=0;
	while(List&&i<List->length)
	{
		printf("%d\n",List->data[i]);
		i++;
	}
}
  1. 两个顺序表合并
Node* merge(Node* l1,Node* l2)
{
	Node* l3=(Node*)malloc(sizeof(Node));
	init(l3);
	int i=0,j=0,k=0;
	while(i<l1->length && j<l2->length)
	{
		if(l1->data[i]<l2->data[j]){
			l3->data[k]=l1->data[i];
			l3->length++;
			i++;
			k++;
		}
		else{
			l3->data[k]=l2->data[j];
			l3->length++;
			j++;
			k++;
		}
	}
	while(i<l1->length){
		l3->data[k]=l1->data[i];
		l3->length++;
		i++;k++;
	}
	while(j<l2->length){
		l3->data[k]=l2->data[j];
		l3->length++;
		j++;k++;
	}
	return l3;
 } 

猜你喜欢

转载自blog.csdn.net/qq_41386300/article/details/83042436