数据结构——顺序表

本文探讨了数据结构中的顺序表,包括如何建立、判断空表、插入、删除、查找和打印元素等基本操作。适合初学者了解顺序表的实现与应用。
摘要由CSDN通过智能技术生成

顺序表的相关操作。实现了顺序表的建立,判断顺序表是否为空,顺序表的插入,顺序表的删除(下标),顺序表的查找,删除表中一元素,打印顺序表的功能。

#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#define FALSE 0
#define TRUE 1
typedef int DataType;

// 顺序表数据类型
struct SeqList
{
    int MAXNUM;  // 顺序表最大的容量
    int n;       // 顺序表中已有的元素个数
    DataType *element; // 真正存放元素的其实地址
};
typedef struct SeqList *PSeqList;


// 顺序表建立的算法,m为申请的结点个数
PSeqList createNullList_seq(int m)
{
    PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
    if(palist != NULL)
    {
        palist->element = (DataType *)malloc(sizeof(DataType)*m);
        if(palist->element)
        {
            palist->MAXNUM = m;
            palist->n = 0;
            return(palist);
        }
        else
        {
            free(palist);
        }
    }
    printf("out of space!\n");
    return NULL;
}

// 顺序表判空
int isNullList_seq(PSeqList palist)
{
    return(palist->n == 0);
}

// 顺序表插入,在下标为p的元素之前插入元素
// 1.移动结点  2.插入结点   3.增加表长
// 先看表空间是否已满,检查插入位置的有效性0<=p<n,注意数据的移动方向
int InsertPre_seq(PSeqList palist, int p, DataType x)
{
    int q;
    if (palist->n >= palist->MAXNUM)
    {
        printf("overflow");
        return FALSE;
    }
    if (p<0 || p>palist->n)
    {
        printf("not exist\n");
        return FALSE;
    }
    for(q=palist->n-1; q>=p; q--)
        palist->element[q+1] = palist->element[q];
    palist->element[p] = x;
    palist->n = palist->n+1;
    return TRUE;
}

// 顺序表删除,删除下标为p的元素
// 检查删除位置有效性 0<=p<n, 注意数据移动方向
int deleteP_seq(PSeqList palist, int p)
{
    int q;
    if(p<0 || p>palist->n)
    {
        printf("Not exist!\n");
        return FALSE;
    }
    for(q=p; q<palist->n-1; q++)
    {
        palist->element[q] = palist->element[q+1];
    }
    palist->n = palist->n-1;
    return TRUE;
}

// 顺序表的查找。存在返回下标,不存在返回FALSE
int locate_seq(PSeqList palist, int x)
{
    int q;
    for (q=0; q<palist->n; q++)
    {
        if (palist->element[q] == x)
        {
            return q;
        }
    }
    return FALSE;
}

// 删除表中一元素
int deleteV_seq(PSeqList palist, DataType x)
{
    int p, q;
    for(p=0; p<palist->n; p++)
    {
        q = locate_seq(palist, x);
        if (q)
        {
            deleteP_seq(palist, q);
        }
    }
    return TRUE;
}

// 打印顺序表
void print(PSeqList palist)
{
    int i;
    for(i=0; i<palist->n; i++)
        printf("%d\t", palist->element[i]);
    printf("\n");
}

int main()
{
    PSeqList lx_alist;
    int max,len,i,x,q;
    int temp;
    int j,k;
    printf("\n please input the max value(<100)of max=");
    scanf("%d",&max);
    lx_alist = createNullList_seq(max);
    printf("判断顺序表是否为空(1 is null): %d\n",isNullList_seq(lx_alist));
    for(i=0; i<10; i++)
    {
        lx_alist->element[i] = i+1;
        lx_alist->n++;
    }
    printf("对数组赋初值:\n");
    print(lx_alist);

    printf("\n修改其中一个元素的值:\n");
    lx_alist->element[5] = 9;
    print(lx_alist);

    printf("\n删除刚改的元素的值:\n");
    temp = 9;
    deleteV_seq(lx_alist, temp);
    print(lx_alist);
    printf("现在所含元素个数为:%d\n", lx_alist->n);

    temp = 5;
    printf("\n在第%d个元素前插入一个数:\n", temp);
    InsertPre_seq(lx_alist, temp, 11);
    print(lx_alist);

    system("pause");
    return 0;
}

初学数据结构,有的代码写的不是很简洁。轻喷。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值