dieshu 2021-04-28 16:51 采纳率: 57.1%
浏览 62
已采纳

数据结构(使用单链表,C环境下)

已知

typedef struct student{  //构建student数据类型

    long num;

    char name[20];

    float score;

};

 

typedef struct student ElemType;  //单链表的类型定义

typedef struct LNode{

ElemType data;t

struct LNode *next;

}LNode,*LinkList;

实现下列单链表的有关算法并调用之。

1、线性表的构造。构造一个含有10名同学元素的单链表,同学数据可从键盘输入。

2、线性表的输出。输出单链表中的元素值。

3、线性表的查找。在给定的单链表上按照某个同学e的学号查找其是否在表中,若找到,函数返回值为其在表中的位置,否则返回-1。

4、线性表的插入。在给定的单链表中插入一个同学e。

5、线性表的删除。在单链表L中删除同学结点e。删除成功返回1,否则返回0。

注意:写出一个完整的程序,在主函数中实现对各个函数的调用,作为验证,每进行一次线性表的有关操作后,最好调用“线性表输出”算法用来显示变化后的线性表元素。

 

实验要求:

(1) 程序要添加适当的注释,程序的书写要采用缩进格式。

(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。

(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

 

 

提示程序的主要结构形式

按照下面给定的程序结构组织程序(包括函数的名称及其调用形式)可能用到的其它函数自己可以补充

#include<stdlib.h>

#include<stdio.h>

#include <iostream.h>

typedef int Status;

#define  OVERFLOW -2

#define  OK 1

#define ERROR -1

 typedef struct student{  //构建student数据类型

    long num;

    char name[20];

    float score;

};ElemType

typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode,*LinkList;

 

 

//函数定义部分:

//1、线性表的构造。构造一个含有n名同学元素的带附加结点的单链表,同学//数据可从键盘输入。

void create_linklist( LinkList &L, int n)

{

 

 

 

 

//2、线性表的输出。输出单链表中的元素值。

void print_linklist(LinkList L)

{

 

 

 

}

 

//3、线性表的查找。在给定的单链表上按照某个同学e的学号查找其是否在表//中,若找到,函数返回值为其在表中的位置,否则返回-1。

int search_linklist(LinkList L,long num)

{//num为要查找的同学学号参数,实参在数函数中给出

 

 

 

 

 

}

 

//4、线性表的插入。在给定的单链表中插入一个同学e。

int  insert_linklist(LinkList &L,ElemType e)//插入成功返回值为1,否则返回值为0

{

 

 

 

}

 

//5、线性表的删除。在单链表L中删除给定同学学号num的结点。删除成功返//回1,否则返回0。

int del_linklist(LinkList &L,long num)

{

 

 

 

}

//主函数

int  main()

{  

LinkList list;

   int m;

   long num1;

   ElemType e1;

   printf("Input length of list:\n");

   scanf("%d",&m);

   create_linklist( list, m);

   printf("The elements of the created list are as follows :\n");

   print_list(list);

   print("Input the num of the element to be searched:\n");

   scanf(.......);

   if(search_linklist(list,num1))printf("it is in the list\n");

   else printf(...........);//输出相关提示

   printf("Input the element to be inserted into the list:\n");

   .........//一组输入语句为元素e1赋值

   if(......)//若插入成功

   {

   printf("The list to be inserted into a elment is as follows:\n");

   print_list(list);

   else printf(........);//给出插入不成功的提示

   

   printf("Input the num of the element to be deleted :\n");

   .........//输入即将删除的元素的学号num1

   if(......)//若删除成功

   {

   printf("The list to be deleted a elment is as follows:\n");

   print_list(list);

   else printf(........);//给出删除不成功的提示

   return 0;

}

  • 写回答

1条回答 默认 最新

  • 正在学C++ 2021-04-28 17:45
    关注
    #include<stdlib.h>
    #include<stdio.h>
    #include <iostream>
    typedef int Status;
    #define  OVERFLOW -2
    #define  OK 1
    #define ERROR -1
    typedef struct student{  //构建student数据类型
        long num;
        char name[20];
        float score;
    }ElemType;
    typedef struct LNode{
        ElemType data;
        struct LNode *next;
    }LNode,*LinkList;
    
    //函数定义部分:
    //1、线性表的构造。构造一个含有n名同学元素的带附加结点的单链表,同学//数据可从键盘输入。
    void create_linklist( LinkList &L, int n)
    {
        L = (LinkList)malloc(sizeof(LNode));
        L->next = NULL;
        LinkList q = L;
        printf("Init(%d):\n",n);
        for(int i=0;i<n;i++){
            LinkList p = (LinkList)malloc(sizeof(LNode));
            scanf("%ld",&p->data.num);
            scanf("%s",p->data.name);
            scanf("%f",&p->data.score);
            p->next = NULL;
            q->next = p;
            q = p;
        }
    }
    
    //2、线性表的输出。输出单链表中的元素值。
    void print_linklist(LinkList L)
    {
        LinkList p = L->next;
        while(p!=NULL){
            printf("%ld ",p->data.num);
            printf("%s ",p->data.name);
            printf("%.2f \n",p->data.score);
            p = p->next;
        }
    }
    
    //3、线性表的查找。在给定的单链表上按照某个同学e的学号查找其是否在表//中,若找到,函数返回值为其在表中的位置,否则返回-1。
    int search_linklist(LinkList L,long num)
    {//num为要查找的同学学号参数,实参在数函数中给出
        LinkList p = L->next;
        int i=0;
        while (p){
            i++;
            if(p->data.num==num) return i;
            p = p->next;
        }
        return ERROR;
    }
    
    //4、线性表的插入。在给定的单链表中插入一个同学e。
    int  insert_linklist(LinkList &L,ElemType e)//插入成功返回值为1,否则返回值为0
    {
        LinkList p = L;
        while (p->next) p = p->next;
        LinkList q = (LinkList)malloc(sizeof(LNode));
        q->data = e;
        q->next = NULL;
        p->next = q;
        return OK;
    }
    
    //5、线性表的删除。在单链表L中删除给定同学学号num的结点。删除成功返//回1,否则返回0。
    int del_linklist(LinkList &L,long num)
    {
        LinkList p = L->next, q = L;
        while (p) {
            if(p->data.num==num){
                q->next = p->next;
                free(p);
                return OK;
            }
            q = p;
            p = p->next;
        }
        return ERROR;
    }
    
    //主函数
    int  main()
    {
        LinkList list;
        int m;
        long num1;
        ElemType e1;
        printf("Input length of list:\n");
        scanf("%d",&m);
        create_linklist( list, m);
        printf("The elements of the created list are as follows :\n");
        print_linklist(list);
    
        printf("Input the num of the element to be searched:\n");
        scanf("%ld",&num1);
        int sign = search_linklist(list,num1);
        if(sign>0)printf("It is in the list. It's position is No.%d.\n",sign);
        else printf("Search ERROR! It is not in the list.\n");//输出相关提示
    
        printf("Input the element to be inserted into the list:\n");
        scanf("%ld",&e1.num);
        scanf("%s",e1.name);
        scanf("%f",&e1.score);  //一组输入语句为元素e1赋值
        if(insert_linklist(list,e1)){//若插入成功
            printf("The list to be inserted into a elment is as follows:\n");
            print_linklist(list);
        }
        else printf("Insert ERROR!\n");//给出插入不成功的提示
    
        printf("Input the num of the element to be deleted :\n");
        scanf("%ld",&num1);//输入即将删除的元素的学号num1
        if(del_linklist(list,num1)==OK)//若删除成功
        {
            printf("The list to be deleted a element is as follows:\n");
            print_linklist(list);
        }
        else printf("Delete ERROR! It is not in the list.\n");//给出删除不成功的提示
    
        return 0;
    }
    /*
    101 aaa 60
    102 bbb 65
    103 ccc 70
    104 ddd 75
    105 eee 80
    106 fff 85
    107 ggg 90
    108 hhh 95
    109 iii 100
    110 jjj 5.5
     */
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?