1. 程式人生 > >線性表之順序儲存

線性表之順序儲存

順序表的儲存結構

# 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;
 }