顺序表的存储结构
# 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;
}