数据结构1

#include <iostream>
#define MaxSize 50
typedef int ElemType;

struct SqList {
    ElemType data[MaxSize];
    int length;
};

void printList(SqList L) {
    for (int i = 0; i < L.length; i++) {
        std::cout << L.data[i] << " ";
    }
    std::cout << std::endl;
}

void removeDuplicate(SqList &L) {
    if (L.length <= 1) { // 顺序表为空或只有一个元素
        return;
    }

    int i = 0; // i 是不重复元素的当前位置
    for (int j = 1; j < L.length; j++) {
        if (L.data[i] != L.data[j]) { // 如果遇到不同元素
            L.data[++i] = L.data[j]; // 将不同元素放入不重复元素序列中
        }
    }
    L.length = i + 1; // 更新顺序表长度
}

int main() {
    SqList L = {{0, 0, 2, 4, 4, 4, 7, 7}, 8};
    std::cout << "原始顺序表:";
    printList(L);
    removeDuplicate(L);
    std::cout << "去重后的顺序表:";
    printList(L);
    return 0;
}
int main()
{
    SqList *L;
    ElemType e;
    printf("顺序表的基本运算如下:\n");
    printf("(1)创建顺序表L,依次插入a,b,c,d,e元素\n");
    ElemType a[] = {'a', 'b', 'c', 'd', 'e'};
    CreateList(L, a, 5);
    printf("(2)输出顺序表L:");
    DispList(L);
    printf("(3)顺序表L长度:%d\n", ListLength(L));
    printf("(4)顺序表L为%s\n", (ListEmpty(L)?"空":"非空"));
    GetElem(L, 3, e);
    printf("(5)顺序表L的第3个元素:%c\n", e);
    printf("(6)元素a的位置:%d\n", LocateElem(L, 'a'));
    printf("(7)在第4个元素位置上插入f元素\n");
    ListInsert(L, 4, 'f');
    printf("(8)输出顺序表L:");
    DispList(L);
    printf("(9)删除L的第3个元素\n");
    ListDelete(L, 3, e);
    printf("(10)输出顺序表L:");
    DispList(L);
    printf("(11)释放顺序表L\n");
    DestroyList(L);
    return 1;
}
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int length;
}SqList;
void CreateList(SqList *&L,ElemType a[ ],int n)
{
    L=(SqList *)malloc(sizeof(SqList));
    for (int i=0;i<n;i++)
       L-> data[i]=a[i];
    L-> length= n;
}

void InitList(SqList *&L)
{
    L=(SqList * )malloc(sizeof(SqList));
    L->length=0;
}

void DestroyList(SqList *&L)
{
    free(L);
}

bool ListEmpty(SqList * L)
{
    return(L -> length== 0);
}

int ListLength(SqList * L)
{
    return(L->length);
}

void DispList(SqList * L)
{
    for (int i= 0;i<L->length;i++)
        printf("%c",L->data[i]);
    printf("\n");
}
bool GetElem(SqList * L, int i,ElemType &e)
{if(i<1|| i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList * L, ElemType e)
{
    int i=0;
    while (i<L->length && L->data[i]!= e)
        i++;
    if (i>=L->length)
        return 0;
    else
        return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
    int j;
    if (i<1|| i>L->length+1)
        return false;
    i--;
    for (j=L->length;j>i;j--)
        L->data[j]=L->data[j-1];
    L->data[i]= e;
    L-> length++;
    return true;

}

bool ListDelete(SqList *&L,int i,ElemType &e)
{
    int j;
    if(i<1 || i>L->length)
        return false;
    i--;
    e=L->data[i];
    for (j=i;j<L->length-1;j++)
        L->data[j]=L->data[j+ 1];
    L-> length--;
    return true;
}


int main()
{
    SqList *L;
    ElemType e;
    printf("顺序表的基本运算如下:\n");
    printf(" (1)初始化顺序表L\n");
    InitList(L);
    printf(" (2)依次插人a,b,c,d,e元素\n");
    ListInsert(L,1,'a');
    ListInsert(L,2,'b');
    ListInsert(L,3,'c');
    ListInsert(L,4,'d');
    ListInsert(L,5,'e');
    printf(" (3)输出顺序表L:");DispList(L);
    printf(" (4)顺序表L长度:%d\n",ListLength(L));
    printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
    GetElem(L,3,e);
    printf(" (6)顺序表L的第3个元素:%c\n",e);
    printf(" (7)元素a的位置:%d\n",LocateElem(L,'a'));
    printf("(8)在第4个元素位置上插人f元素\n");
    ListInsert(L,4,'f');
    printf(" (9)输出顺序表L:");
    DispList(L);
    printf("(10)删除L的第3个元素\n");
    ListDelete(L,3,e);
    printf("(11)输出顺序表L:");DispList(L);
    printf(" (12)释放顺序表L\n");
    DestroyList(L);
    CreateList(L,e,5);
    printf("2.输出创建顺序表:");DispList(L);
return 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值