//
// main.c
// List_operate
//
// Created by Smallflyfly on 2018/11/8.
// Copyright © 2018 fang. All rights reserved.
//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
int *elem;
int length;
int size;
}SqList;
//int Init_SqList(SqList &L);
void Init_SqList(SqList &L)
{
L.elem = (int *)malloc(100 * sizeof(int));
L.length = 0;
L.size = 100;
}
void Creat_SqList(SqList &L)
{
int n, i, e;
printf("Enter your list length:");
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%d", &e);
L.elem[i] = e;
}
L.length = n;
}
int Get_ith_elem(SqList L, int i)
{
return L.elem[i];
}
int Find_Elem(SqList L, int e)
{
int i;
for(i=0; i<L.length; i++)
if(L.elem[i] == e)
return i+1;
return -1;
}
void Insert_SqList(SqList &L, int e, int j)
{
if(L.length == L.size)
{
int *newbase;
newbase = (int *)realloc(L.elem, (L.size + 100) * sizeof(int));
L.elem = newbase;
L.size += 100;
}
int *p, *q;
q = &L.elem[j-1];
for(p=&L.elem[L.length]; p>q; p--)
*p = *(p-1);
*q = e;
L.length ++;
}
void Print_List(SqList L)
{
int *p;
for(p = &L.elem[0]; p<&L.elem[L.length-1]; p++)
printf("%d ", *p);
printf("%d\n", *p);
}
void Delete_SqList(SqList &L, int i)
{
int *q;
for(q = &L.elem[i-1]; q<&L.elem[L.length-1]; q++)
*q = *(q+1);
L.length --;
}
void Merge_SqList(SqList L1, SqList L2, SqList &L)
{
int *p, *q;
int i = 1;
p = &L1.elem[0];
q = &L2.elem[0];
while(p<&L1.elem[L1.length] && q<&L2.elem[L2.length])
{
if(*p < *q)
{
Insert_SqList(L, *p, i++);
p++;
}
else
{
Insert_SqList(L, *q, i++);
q++;
}
// i++;
}
while(p<&L1.elem[L1.length])
{
Insert_SqList(L, *p, i++);
p++;
}
while(q<&L2.elem[L2.length])
{
Insert_SqList(L, *q, i++);
q++;
}
}
int main()
{
SqList L, L1, L2;
Init_SqList(L);
Creat_SqList(L);
int i, ei, e, p_e;
printf("Which elem do you want? total %d elements. ", L.length);
scanf("%d", &i);
if(i<1 || i>=L.length)
printf("Error num, please check it.\n");
ei = Get_ith_elem(L, i-1);
printf("The %dth num is %d.\n", i, ei);
printf("Enter the element you want find? ");
scanf("%d", &e);
p_e = Find_Elem(L, e);
if(p_e < 0)
printf("Not found element %d.\n", e);
else
{
printf("Element index is %d.\n", p_e);
}
printf("Please enter the element and the place you want to insert.\n");
scanf("%d %d", &e, &p_e);
Insert_SqList(L, e, p_e);
printf("After insert element:\n");
Print_List(L);
printf("Wich place element do you want to delete: ");
scanf("%d", &i);
Delete_SqList(L, i);
Print_List(L);
Init_SqList(L1);
Creat_SqList(L1);
Init_SqList(L2);
Creat_SqList(L2);
Init_SqList(L);
Merge_SqList(L1, L2, L);
Print_List(L);
return 0;
}