顺序表的操作

#include<stdio.h>
#include<stdlib.h>
#define N 1000
struct list
{
    int *arr;
    int size;
};
void init_list(struct list *p)
{
    int *s;
    s=(int *)malloc(N*sizeof(int));
    p->arr=s;
    p->size=-1;
}
void scanf_list(struct list *p,int e)
{
     if(p->size>=N-1)  
     {
        printf("错误\n"); 
        return;
     }
    p->size++;
    p->arr[p->size]=e;
}
void Delete_list(struct list *L,int pos)  
{  
    int i;  
    if(pos<1||pos>L->size)  
    {  
        printf("pos值越界\n");  
        return;
    }  
    for(i=pos; i<=L->size; i++)  
        L->arr[i-1]=L->arr[i];  
    L->size--;
}
void charu_list(struct list *p,int e)
{
    if(p->size>=N-1)
    {
        printf("插入错误\n");
        return;
    }
    p->size++;
    p->arr[p->size]=e;
}
void Search(struct list *L,int e)  
{  
    int i;  
    for(i=0; i<L->size; i++)  
    {  
        if(L->arr[i]==e)  
        {  
            printf("找到,%d在第%d个位置\n",e,i+1);  
            return;
        }  
    }  
    printf("没找到\n");  
    return;  
}
int main()
{
    int n,m,i,k,j;
    struct list a,b,c,d;
    struct list *A,*B,*C,*D;
    A=&a;B=&b;C=&c;D=&d;
    init_list(A);init_list(B);init_list(C);init_list(D);
    printf("输入AB集合元素的个数\n");
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
    {
        scanf("%d",&k);
        scanf_list(A,k);
    }

    for(i=0;i<n;i++)
    {
        scanf("%d",&k);
        scanf_list(B,k);
    }
    printf("输入想在A中插入的数,输入0结束\n");
    while(1)
    {
        scanf("%d",&k);
        if(k==0)
            break;
        scanf_list(A,k);
    }
    printf("输入想在B中插入的数,输入0结束\n");
    while(1)
    {
        scanf("%d",&k);
        if(k==0)
            break;
        scanf_list(B,k);
    }
    printf("输入想在A中删除的数的位置\n");
    scanf("%d",&k);
    Delete_list(A,k);
    printf("输入想在B中删除的数的位置\n");
    scanf("%d",&k);
    Delete_list(B,k);
    printf("输入想在A中查找的数\n");
    scanf("%d",&k);
    Search(A,k);
    printf("输入想在B中查找的数\n");
    scanf("%d",&k);
    Search(B,k);
    for(i=0;i<=A->size;i++)
    {
        D->arr[i]=A->arr[i];
        C->arr[i]=A->arr[i];
    }
    C->size=A->size;
    D->size=A->size;

    for(i=0;i<=B->size;i++)
        for(j=0;j<=A->size;j++)
        {
            if(B->arr[i]==A->arr[j])
                break;
            if(j==A->size)
            {
                scanf_list(C,B->arr[i]);
            }
        }
    for(i=0;i<=B->size;i++)
        for(j=0;j<=D->size;j++)
        {
            if(B->arr[i]==D->arr[j])
                Delete_list(B,j+1);
        }
    printf("A:\n");
    for(i=0;i<=A->size;i++)
        printf("%d ",A->arr[i]);
    printf("\n");
    printf("B:\n");
    for(i=0;i<=B->size;i++)
        printf("%d ",B->arr[i]);
    printf("\n");
    printf("C:\n");
    for(i=0;i<=C->size;i++)
        printf("%d ",C->arr[i]);
    printf("\n");
    printf("D:\n");
    for(i=0;i<=D->size;i++)
        printf("%d ",D->arr[i]);
    printf("\n");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值