線性表之順序儲存
阿新 • • 發佈:2018-11-10
順序表的儲存結構
# define MAXSIZE 10
typedef int ElemType;
typedef struct LNode{
ElemType data[MAXSIZE];
int length;
}Node;
順序表的基本運算
- 順序表的初始化
void init(Node* List)
{
List->length=0;
}
- 順序表的新增(末尾新增)
void add(Node* List,ElemType value)
{
int i=0;
while(List&&i< List->length)
i++;
List->data[i]=value;
List->length++;
}
- 順序表的插入(在第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;
}
- 順序表的查詢(按值查詢,查詢值為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;
}
- 順序表的刪除(刪除第x位元素)
void del(Node* List,int x)
{
int i=x;
while(i<List->length)
{
List->data[i]=List->data[i+1];
i++;
}
List->length--;
}
- 輸出順序表
void print(Node* List)
{
int i=0;
while(List&&i<List->length)
{
printf("%d\n",List->data[i]);
i++;
}
}
- 兩個順序表合併
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;
}