数据结构-线性表操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/B08370108/article/details/83894515
//
//  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;
}

猜你喜欢

转载自blog.csdn.net/B08370108/article/details/83894515