数据结构——顺序表

来源:互联网 发布:淘宝网店打底衫长袖 编辑:程序博客网 时间:2024/05/17 23:31

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

#include<stdio.h>#include<stdlib.h>#include <windows.h>#define FALSE 0#define TRUE 1typedef 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;}// 顺序表的查找。存在返回下标,不存在返回FALSEint 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;}

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

0 0
原创粉丝点击