鱼C论坛

 找回密码
 立即注册
查看: 2775|回复: 2

单链表

[复制链接]
发表于 2018-4-19 18:27:13 | 显示全部楼层 |阅读模式

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

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

x
各位帮帮忙,看一下哪里错了。
#ifndef LIST_H__
#define LIST_H__
#include<stdio.h>
#include<stdlib.h>


typedef struct NODE
{
    int data;
    struct NODE *next;
}List,*linkList;
// List 为该结构体类型别名,linkList为该结构体指针类型别名

// 初始化单链表
int initList(linkList *head);
// 将一串数据输入至链表
void inputList(linkList *head);
// 通过索引插入新数据
void insertByIndex(linkList *head,int index);
// 通过索引删除数据
void deleteByIndex(linkList *head,int index);
// 打印链表中的数据
void printList(linkList *head);
// 获取链表的长度
int getLength(linkList *head);
// 判断链表是否为空
int isEmpty(linkList *head);
// 测试链表连接情况
void test(linkList *t);

#endif




#include"list.h"

int main(int argc, char *argv[])
{
    linkList head;

    initList(&head);

    inputList(&head);

    printList(&head);

    insertByIndex(&head,3);

    printList(&head);

    deleteByIndex(&head,2);

    printList(&head);

    getLength(&head);

    return 0;
}



#include"list.h"

int initList(linkList *head)
{
    *head = (linkList)malloc(sizeof(List));
    if((*head) == NULL)
        {
        printf("无法分配空间,初始化失败\n");
        return 0;
    }
    (*head)->next = NULL;
    printf("初始化成功\n");
    return 1;
}

void inputList(linkList *head)
{
    linkList afterList = (*head);

    // 找出表的尾部,使得函数可以重复添加数据
    while(afterList->next != NULL)
        {
        afterList = afterList->next;
    }

    int length = 0;
    printf("新数据的数量:\t");
    scanf("%d",&length);

    linkList p;
    // 如何将一个一个节点相互连接 head->p->p1->p2->p3->null?
    int temp;
    while(length>0)
        {
        p = (linkList)malloc(sizeof(List));
        scanf("%d",&temp);

        p->data = temp;             // 存入数据
        p->next = afterList->next;  // 将新生成的节点的next赋值为NULL
        afterList->next = p;        // 将上一个节点的next指向新生成的
        afterList = p;              // 有新节点生成,将afterList指向新节点

        length--;
        if(isEmpty(head) == 1)
                {
            (*head)->next = p;      // 保证头指针,指向第一个节点
        }
    }
}

void insertByIndex(linkList *head,int index)
{
    linkList theNew = (linkList)malloc(sizeof(List));// 新增节点一定要同时分配新空间

    int data;
    printf("请输入需要插入的数:\t");
    scanf("%d",&data);

    linkList theAfter = (*head);//防止头指针被破坏
    linkList theBefore;
    for(;index>0;index--)
        {
        theBefore = theAfter;
        theAfter = theAfter->next;
    }
    theNew->data = data;
    theBefore->next = theNew;
    theNew->next = theAfter;
    printf("插入成功\n");
}

void deleteByIndex(linkList *head,int index)
{

    linkList theAfter = (*head);//防止头指针被破坏
    linkList theBefore,temp;
    for(;index>0;index--)
        {
        theBefore = theAfter;
        theAfter = theAfter->next;
    }
    theBefore->next = theAfter->next;
    free(theAfter);
    printf("删除成功\n");
}

void printList(linkList *head)
{
    printf("表数据为:\t");

    if(isEmpty(head) == 1)
        {
        return;
    }

    linkList temp = (*head)->next;

    do{
        printf("%d\t",temp->data);
        temp = temp->next;
    }while(temp != NULL);

    printf("\n");
}

int getLength(linkList *head)
{

    int result = 0;

    if(isEmpty(head) == 1)
        {
        return result;
    }

    linkList current = (*head)->next;
    do{
        result++;
        current = current->next;
    }while(current != NULL);

    printf("表长度为:%d\n",result);
    return result;
}

int isEmpty(linkList *head)
{
    if((*head)->next == NULL)
        {
        //printf("表为空\n");
        return 1;
    }
        else
        {
        //printf("表不为空\n");
        return 0;
    }
}

void test(linkList *t)
{
    printf("\n-------测试-------\n");
    printf("self:%p\t",(*t));
    printf("data:%d\t",(*t)->data);
    printf("next:%p\n",(*t)->next);
    printf("-------结束-------\n\n");
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-19 20:55:38 | 显示全部楼层
你先指出错误地方啊,还要别人去找?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-27 01:25:16 | 显示全部楼层
简单测试下,貌似后面加入的数据会覆盖前面的数据

初始化成功
新数据的数量:        2
1
2
表数据为:        1        2       
请输入需要插入的数:        5
插入成功
表数据为:        1        2        5       
删除成功
表数据为:        1        5       
表长度为:2
read: -p: no coprocess
&#10140;  ~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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