C语言数据结构中“顺序表”应怎样清空和销毁?

C语言数据结构中“顺序表”应怎样清空和销毁?,第1张

1、首先是定义一个这样的函数,名称为【SeqSearch】,返回值为Int。

2、接下来就可以,传入一个数组,一个长度,和一个查找的值。

3、此时,就能从零开始到长度减一个个判断。

4、此时,可以判断,如果找到了就返回当前下标加一。

5、否则就让这个函数返回负一。

6、此时,可以在Main函数中配合运行测试。

7、输出对于每次删除 *** 作输出一行,如果k不合法(k大于n或者k为0),输出 -1, 否则输出删除的元素

线性表实际上就是一个数组,清空 *** 作就意味着清除数组当前保存的所有元素,表的长度归0,以后的数组插入 *** 作要从0下标元素开始,所以也就不需要再费时去一个一个清除元素值,或者重新分配数组空间了,直接将长度归0就可以了,之后在插入元素时(清空后的第一个 *** 作只能是插入元素,不能取元素或者删除元素)通过表长度判断应该插入到何处(清空后的第一次插入只能放在0下标位置)。

所以,书上的说法是正确的,照书上的来就可以了,当然如果定义了一个指针,那么首先要用malloc()等函数分配空间,然后再L->Length=0

#include<stdio.h>

struct Link

{

    int x

    struct Link * next

} node

int len = -1  //现在单链表的总长度

struct Link *Init(void) //创建

{

    struct Link *L = (struct Link *)malloc(sizeof(struct Link))

    L->next = NULL

    return L

}

void Insert(struct Link *head, int n)    //插入

{

    struct Link *pnew = Init(), *L = head, *P = L

    if(n >= len)

    {

        while(L->next != NULL)

            L = L->next

        L->next = pnew

    }

    else

    {

        while(n--)

        {

            P = L

            L = L->next

        }

        P->next = pnew

        pnew->next = L

    }

    scanf("%d", &pnew->x)

    len++

    return 

}

void Delete(struct Link *head, int n)   //删除

{

    struct Link *L = head, *P = L

    while(n--)

    {

        P = L

        L = L->next

    }

    P->next = L->next

    len--

    return

}

void Position(struct Link *head, int value) //定位

{

    struct Link *L = head

    int index = 0

    while(L->x != value && L->next != NULL)

    {

        index++

        L = L->next

    }

    printf("在第%d个节点\n", index)

    return

}

void Value(struct Link *head, int index)   //取值

{

    printf("第%d个位置的数是:", index)

    struct Link *L = head

    while(L->next != NULL && index--)

        L = L->next

    printf("%d\n", L->x)

    return

}

void Len(void)  //表长

{

    printf("表长 = %d\n", len)

    return

}

void Clear(struct Link *head)   //清空

{

    free(head)

    return

}

void Print(struct Link *head)   //输出

{

    struct Link *L = head->next

    while(L -> next != NULL)

    {

        printf("%d ", L->x)

        L = L->next

    }

    return

}

int main(void)

{

    struct Link *head

    head = Init()

    int i = 0

    for(i = 0 i < 10 i++)

    {

        printf("输入第%d个数:", i + 1)

        Insert(head, i)

    }

    Delete(head, len)

    printf("输入要查询的值:")

    scanf("%d", &i)

    Position(head, i)

    Value(head, 7)

    Len()

    Print(head)

    Clear(head)

    return 0

}


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

原文地址: https://outofmemory.cn/sjk/10714487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存