数据结构之顺序表

已知Sqlist 是一个结构体变量, 其中包含data这类整形元素, 定义一个 Sqlist *L.  L->data  = (* L).data.

#include <cstdio>
#include <cstdlib>
#define OK 1
#define ERROR 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
typedef struct 
{
    ElemType data[MAXSIZE];
    int length;
} Sqlist;
Sqlist Q, S, R;
Status GetELem(Sqlist L, int i, ElemType *e)  //用e返回L中第i个元素的值(地址)。 
{
    if(L.length == 0 || i < 1 || i > L.length)
        return ERROR;
    *e = L.data[i-1];
    return OK;     
}
void ListInput(int l, Sqlist *L)
{
    int n;
    printf("输入链表%d元素个数:
", l); 
    scanf("%d", &n);
    printf("输入链表%d元素:
", l);
    for(int i = 0; i < n; i++)
        scanf("%d", &L->data[i]);
    L->length = n;
}
void ListOutput(Sqlist *L)
{
    for(int i = 0; i < L->length; i++)
        printf("%d ", L->data[i]);
    printf("
");
}
Status ListInsert(Sqlist *L, int i, ElemType e) //在表L中位置i处插入一个元素e 
{
    if(L->length == MAXSIZE)
    {
        printf("ERROR:超出数组最大空间分配
");
        return ERROR;
    }
    if(i < 1 || i > L->length+1)
    {
        printf("ERROR:插入位置不与任一元素邻居
");
        return ERROR;
    } 
    if(i <= L->length)
    {
        for(int k = L->length-1; k >= i-1; k--)
            L->data[k+1] = L->data[k];
    }
    L->data[i-1] = e;
    L->length++;
}
Status ListDelete(Sqlist *L, int i, ElemType *e) //删除第i个位置元素; 
{
    if(L->length == 0)
    {
        printf("顺序表中不存在元素
");
        return ERROR;
    }
    if(i < 1 || i >  L->length)
    {
        printf("ERROR
");
        return ERROR; 
    }
    *e = L->data[i-1];
    if(i <= L->length)
    {
        for(int k = i; k < L->length; k++)
            L->data[k-1] = L->data[k];    
    }    
    L->length--; 
} 
void ListMercy(Sqlist *L, Sqlist *I, Sqlist *N)
{
    int sum = 0;
    int lengthL = L->length;
    int lengthI = I->length;
    for(int i = 0; i < lengthI; i++)
        N->data[i] = I->data[i];
    N->length = L->length;
//    printf("%d
",  N->length);
    for(int i = 0; i < lengthL; i++)
    {
        for(int j = 0; j < N->length; j++)
            if(L->data[i] != N->data[j])
                sum++;
        if(sum == N->length)
            N->data[N->length++] = L->data[i];
        sum = 0; 
    }
    //printf("%d
", N->length);
} 
int main()
{
    int OP; printf("1:对链表1操作
2:对链表2操作
3:合并操作
");
    while(scanf("%d", &OP), OP)
    {
        switch(OP)
        {
            case 1:{
                        system("cls");
                        printf("对链表1操作:
"); 
                        ListInput(1, &Q);
                        int a, b, T;
                        printf("分别输入待插入位置 及 元素:
"); 
                        scanf("%d%d", &a, &b);
                        ListInsert(&Q, a, b);
                        printf("输入待删除位置:
");
                        scanf("%d", &a);
                        ListDelete(&Q, a, &T);
                        printf("输出链表1
");
                        ListOutput(&Q);
                        break;
                } 
            case 2:{ 
                        system("cls");
                        printf("对链表2操作:
");
                        ListInput(2, &S);
                        int c, d, F;
                        printf("分别输入待插入位置 及 元素:
"); 
                        scanf("%d%d", &c, &d);
                        ListInsert(&S, c, d);
                        printf("输入待删除位置:
");
                        scanf("%d", &c);
                        ListDelete(&S, c, &F);
                        printf("输出链表2
");
                        ListOutput(&S);
                        break;
                } 
            case 3:{
                        system("cls");
                        printf("合并链表1, 2
");
                        ListMercy(&Q, &S, &R);
                        printf("输出合并后链表:
");
                        ListOutput(&R);
                   } // printf("1:对链表1操作
2:对链表2操作
3:合并操作
");
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/soTired/p/4876340.html