c语言实现顺序表及其相关 *** 作

c语言实现顺序表及其相关 *** 作,第1张

#c语言实现顺序表及其相关 *** 作
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#define ERROR 0
#define TRUE 1

#define MAXSIZE 20     /*初始分配的顺序表长度*/
typedef  int ElemType;  /*定义表元素的类型*/
typedef struct {
    ElemType elem[MAXSIZE];  /*存储空间的基地址,即存储线性表中元素的存储空间及大小*/
    int length;           /*顺序表的当前长度*/
}SeqList;

int Init_SeqList(SeqList* L); /*初始化顺序表*/
int Create_SeqList(SeqList* L, int n); /*创建顺序表*/
int Insert_SeqList(SeqList* L, int i, ElemType x);/*顺序表的插入 *** 作*/
int Traverse_SeqList(SeqList* L);  /*顺序表的遍历*/
int Delete1_SeqList(SeqList* L, int i); /*顺序表的按序号删除 *** 作*/
int Delete2_SeqList(SeqList* L, ElemType x); /*顺序表的按数据删除 *** 作*/
int Find_SeqList(SeqList* L, ElemType x); /*查找值为x的元素*/

int Init_SeqList(SeqList* L) {
    L->length=0; 		/*空表长度为0 */
    return TRUE;
}/*InitList*/

int Create_SeqList(SeqList* L, int n) {
    ElemType x;
    int i;
    for (i = 0;i<n ; i++) {/*创建顺序表*/
        printf("Please Input data %d: ", i+1);
        scanf("%d", &L->elem[i]);
        L->length++;
        if (i>MAXSIZE-1)
            return ERROR;
    }
    return TRUE;
}/*CreateList*/

/*输出顺序表中的元素*/
int Traverse_SeqList(SeqList* L) {
    int i;
    for (i = 0; i < L->length; i++)
        printf("%-7d", L->elem[i]);
    printf("%\n\n");
    return TRUE;
}/*TraverseList*/
/*在顺序表L中,序号i的位置上插入值为x的元素*/
int Insert_SeqList(SeqList* L, int i, ElemType x) {
    int j;
    if (i<1 || i>MAXSIZE)//i不在顺序表的范围内
        return ERROR;
    if (L->length == MAXSIZE)//顺序表已满
        return ERROR;
    for (j = L->length-1; j>=i-1;j--) {//插入--从后往前循环
        L->elem[j+1]=L->elem[j];
    }
    L->elem[i-1]=x;
    L->length++;
    return TRUE;
}/*ListInsert*/

/*在顺序表中删除第i个元素*/
int Delete1_SeqList(SeqList* L, int i) {
    int j;
    if (i<1 || i>MAXSIZE)
        return ERROR;
    for (j = i; j<=L->length-1; j++)//从前往后一个一个往前挤--从前往后挤
        L->elem[j-1]=L->elem[j];
    L->length--;
    return TRUE;
}

/*在顺序表中按照数据删除对象,即删除值为x的元素*/
int Delete2_SeqList(SeqList* L, ElemType x) {
    int i, j;
    for (i = 0; i<=L->length-1; i++)/*查找数据x的位置*/
        if (L->elem[i]==x)
            break;
    if (i==L->length)/*s顺序表中没有值为x的对象*/
        return ERROR;
    for (j = i+1; j<=L->length-1; j++)/*删除值为x的对象*/
        L->elem[j-1]=L->elem[j];
    L->length--;
    return TRUE;
}/*Delete2*/

/*在顺序表中查找指定值元素,返回其序号,若没有返回ERROR*/
int Find_SeqList(SeqList* L, ElemType x) {
    int i = 0;
    for (i = 0; i < L->length - 1; i++)
    {
        if (L->elem[i] == x)
            break;
    }
    if (i == L->length)
        return  ERROR;
    else return i+1;
   
}/*Find*/

/*顺序表链接,把表s2连接在s1的后面,失败返回0*/
int Cat_SeqList(SeqList* L1, SeqList* L2)
{
    int i;
    if (L1->length+L2->length>MAXSIZE)/*溢出,无法连接*/
        return ERROR;
    for (i=0; i<=L2->length-1; i++)
        L1->elem[L1->length+i]=L2->elem[i];
    L1->length = L1->length + L2->length;//更新L1中length的值
    return TRUE;

}/*Cat*/

int main() {
    struct list* s1, * s2;
    int n, m, k;
    char c;

    printf("**************************************************\n");
    printf("               顺 序 表 常 用 算 法\n");
    printf("**************************************************\n\n");

    s1 = (SeqList*)malloc(sizeof(SeqList));	/*建立顺序表sl,为sl开辟存储空间*/
    s2 = (SeqList*)malloc(sizeof(SeqList));	/*建立顺序表sl,为s2开辟存储空间*/

    printf("1、初始化线性表:设置表长为0\n");
    if (Init_SeqList(s1))  printf("顺序表初始化成功……\n\n");

    printf("2、创建顺序表:\n");
    do {
        printf("请输入顺序表长度(n>=0):");
        scanf("%d", &n);   /*输入顺序表的元素个数*/
    } while (n < 0);
    if (Create_SeqList(s1, n)) printf("顺序表创建成功……\n\n"); ;

    printf("3、遍历顺序表:\n");  /*依次访问顺序表中所有元素*/
    Traverse_SeqList(s1);

    printf("4、顺序表的插入 *** 作:\n");
    printf("请输入待插入的位序:");
    scanf("%d", &m);
    printf("请输入待插入的数据:");
    scanf("%d", &k);
    if (Insert_SeqList(s1, m, k)) printf("插入 *** 作执行成功……\n *** 作结果:");
    Traverse_SeqList(s1);

    printf("5、请输入删除方式,1表示按内容删除,2表示按序号删除\n");
    scanf("%d", &m);
    if (m == 2)
    {
        printf("您是选择按照序号删除对象,请输入带删除元素的序号:");
        scanf("%d", &k);
        if (Delete1_SeqList(s1, k))
            printf("删除第%d号元素成功……\n *** 作结果", k);
        else
            printf("删除失败!");
        printf(" *** 作结果是:");
        Traverse_SeqList(s1);
    }

    else if (m == 1)
    {
        printf("您是选择按照内容删除对象,请输入待删除元素的数据的值:");
        scanf("%d", &m);
        if (Delete2_SeqList(s1, m))
            printf("删除元素%d的值成功……\n *** 作结果:", m);
        else
            printf("删除失败!\n");
        Traverse_SeqList(s1);
    }
    else
        printf("输入错误!\n");


    printf("6、请输入待查找元素值:");
    scanf("%d", &m);
    if (Find_SeqList(s1, m) != ERROR)
        printf("查找成功,值为 %d 的元素序号为 %d\n", m, Find_SeqList(s1, m));
    else
        printf("查找失败!顺序表中没有值为%d的元素。

\n", m); printf("7、创建顺序表s2:\n"); if (Init_SeqList(s2))printf("初始化表s2成功!\n"); printf("请输入顺序表s2长度(n>=0):"); scanf("%d", &n); //输入顺序表s2的元素个数 if (Create_SeqList(s2, n)) printf("顺序表s2创建成功……\n\n"); ; printf("8、顺序表的连接 *** 作:\n"); if (Cat_SeqList(s1, s2)) printf("顺序表链接 *** 作成功……\n *** 作结果:"); Traverse_SeqList(s1); return 0; }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存