鱼C论坛

 找回密码
 立即注册
查看: 2117|回复: 6

数据结构 建表

[复制链接]
发表于 2020-3-8 21:57:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
建表(初始化表)函数: ListInit()
typedef int Listltem;
构建一 张元素顺序存储表,完成一 下操作:|
插入:1 2 3 4 5-->1 2 6 3 4 5
删除:1 2 3 4 5-->1 2 3 5
求大佬救救孩子吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-8 22:07:10 | 显示全部楼层
问题都没看懂。表示没法帮!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 22:57:29 | 显示全部楼层
本帖最后由 major_lyu 于 2020-3-8 23:01 编辑


给你写了建表和删除的
#include <stdio.h>
#include <malloc.h>

typedef struct node
{
    int val;
    struct node *next;
} ListItem;

ListItem *ListInit();
void printList(ListItem *head);
void deleteItem(ListItem *head, int key);

int main()
{
    ListItem *list = NULL;
    list = ListInit();
    printList(list);
    int n;
    printf("input the key to be deleted\n");
    scanf("%d", &n);
    deleteItem(list, n);
    printList(list);

    return 0;
}

ListItem *ListInit()
{
    int num;
    printf("please input the numbers of iterms\n");
    scanf("%d", &num);
    if (num <= 0)
        return NULL;
    printf("input items to be added:\n");
    ListItem *head = malloc(sizeof(ListItem));
    ListItem *ptr = head;
    for (int i = 0; i < num - 1; i++)
    {
        scanf("%d", &(ptr->val));
        ptr->next = malloc(sizeof(ListItem));
        ptr = ptr->next;
    }

    scanf("%d", &(ptr->val));
    ptr->next = NULL;
    return head;
}

void printList(ListItem *head)
{
    ListItem *ptr = head;
    while (ptr != NULL)
    {
        printf("%d->", ptr->val);
        ptr = ptr->next;
    }
    printf("NULL\n");
}

void deleteItem(ListItem *head, int key)
{
    ListItem *ptr = head;
    while (ptr->next != NULL)
    {
        if (ptr->next->val == key)
        {
            ListItem *temp = ptr->next;
            ptr->next = ptr->next->next;
            free(temp);
        }
        else
        {
            ptr = ptr->next;
        }
    }
}
微信截图_20200308213337.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 20:41:37 | 显示全部楼层
major_lyu 发表于 2020-3-8 22:57
给你写了建表和删除的

太感谢了,我去研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 20:47:19 | 显示全部楼层
major_lyu 发表于 2020-3-8 22:07
问题都没看懂。表示没法帮!!!

害,我也不懂这种东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 20:22:10 | 显示全部楼层
我也是初学者,写的可能好理解一点,学过去一段时间了,感觉生疏了,正好复习一下嘿嘿,就是创建,插入,测量,删除的几个操作。
#include<stdio.h>
#include<stdlib.h>

#define LEN sizeof(LinkList)

typedef struct        Node
{
        int data;
        struct Node* next;
}LinkList;

LinkList *InitList()
{
        LinkList* L;
        L = (LinkList *)malloc(LEN);
        if (L == NULL)
        {
                exit(0);
        }
        L->next == NULL;
        return L;
}

LinkList *CreatList()  //尾插法创建单链表
{
        LinkList* L;
        LinkList* p;
        LinkList* tail; //定义一个尾指针
        int num;
        
        L = InitList();  //头结点
        tail = L;
        printf("创建一个单链表,请输入数据以0结束: ");
        scanf("%d", &num);
        while (num != 0)
        {
                p = (LinkList*)malloc(LEN);
                p->data = num;
                tail->next = p;
                tail = p;
                scanf("%d",&num);
        }
        tail->next = NULL;

        return L;
}

void PrintList(LinkList* L)
{
        LinkList* p;
        p = L->next;
        while (p != NULL)
        {
                printf("%d ", p->data);
                p = p->next;
        }
}

LinkList* DeleteList(LinkList* L, int N)
{
        LinkList* p;
        LinkList* q;
        p = L->next;
        while (p != NULL)
        {
                if (L->next->data == N)  //如果第一个结点就是要删除的元素
                {
                        L->next = L->next->next;
                        break;
                }
                else if(p->next->data == N)
                {
                        p->next = p->next->next;
                        break;
                }
                p = p->next;
        }

        return L;
}

int        ListLength(LinkList* L)
{
        int count = 0;
        LinkList* p;
        
        p = L->next;
        
        while (p != NULL)
        {
                count++;
                p = p->next;
        }
        
        return count;
}

LinkList* InsertList(LinkList* L, int M, int local)
{
        int i=0;
        LinkList *p;
        LinkList* q;  //用来接收要插入的数据

        q = (LinkList *)malloc(LEN);
        p = L->next;
        q->data = M;
        while (p != NULL)
        {
                if (local == 1)  //如果插在第一个结点
                {
                        q->next = L->next;
                        L->next = q;
                        break;
                }
                else if((i+2) == local)
                {
                        q->next = p->next;
                        p->next = q;
                        break;
                }
                i++;
                p = p->next;
        }

        return L;
}

int main(void)
{
        LinkList* L;
        int N;
        int local, M;
        int len;

        L = CreatList();

        printf("当前链表中的元素是:\n");
        PrintList(L);

        printf("\n当前链表的长度是:");
        len = ListLength(L);
        printf("%d", len);

        printf("\n请输入你想插入的元素是及它的位置: ");
        scanf("%d %d", &M, &local);
        InsertList(L, M, local);

        printf("插入后链表中的元素是:\n");
        PrintList(L);

        printf("\n请输入你想要删除的元素:");
        scanf("%d", &N);
        DeleteList(L,N);

        printf("删除后链表中的元素是:\n");
        PrintList(L);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 21:07:57 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-3-10 21:12 编辑

你看看!
首先要确定你要操作的节点位置,然后找到你要操作位置的上一个节点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表