我乌鱼了 2021-09-19 15:04 采纳率: 50%
浏览 26
已结题

线性表子系统 编译后空白

如图,不知问题出在哪里

img


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
typedef struct linknode
{
    DataType data;
    struct linknode *next;
 } LinkList;
 

 
 LinkList *InitList() //初始化 
 {
     LinkList *head;
     head=(LinkList*)malloc(sizeof(LinkList));
     head->next=NULL;
     return head;
 }
 
void DispList(LinkList *head)
{
    LinkList *p;
    p=head->next;
    while(p!=NULL)
    {
        printf("%5d",p->data);
        p=p->next;
    }
}

int LengthList(LinkList *head){             //求链表长度函数 
    LinkList *p=head->next;
    int j=0;
    while (p!=NULL){
        p=p->next;
        j++;
    }
    return j;
}
 
 
 void CreateListL(LinkList *head,int n){         //建立 
     LinkList *s,*last;
    int i;
    last=head;
    printf("请输入%d个整数:",n);
    for(i=0;i<n;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));
        scanf("%d",&s->data);
        s->next=NULL;
        last->next=s;
        last=s; 
      }  
      printf("建立链表操作成功!");
 }
 
void InsList(LinkList *head,int i,DataType x){    //插入 
    int j=0;
    LinkList *p,*s;
    p=head;
    while(p->next!=NULL&&j<i-1){
        p=p->next;
        j++;
    }
    if(p!=NULL)
    {
        s=(LinkList *)malloc(sizeof(LinkList));
        s->data=x;
        s->next=p->next;
        p->next=s;
        printf("插入元素成功!"); 
    }
    else
    printf("插入元素失败");
} 

void DelList(LinkList *head,int i){  //删除 
    int j=0;
    DataType x;
    LinkList *p=head,*s;
    while(p->next!=NULL&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(p->next!=NULL&&j==i-1)
    {
        s=p->next;
        x=s->data;
        p->next=s->next;
        free(s);
        printf("删除第%d位上的元素%d成功",i,x);
    }
    else 
    printf("删除结点位置错误,删除失败");
}

void SearchList(LinkList *head,int i){     //按位置查找 
    LinkList *p;
    int j=0;
    p=head;
    if(i>LengthList(head))
    printf("未知错误,链表中没有该位置!");
    while(p->next!=NULL&&j<i){
        p=p->next;
        j++;
    }
    if(j==i)
    printf("在第%d位上的元素值为%d",i,p->data);
}

void Locate(LinkList *head,DataType x)     //查找值为x的元素位置 
{
    int j=1;
    LinkList *p;
    p=head->next;
    while(p!=NULL&&p->data!=x)
    {
        p=p->next;
        j++;
    }
    if(p!=NULL)
    printf("在表的第位找到值为的结点",j,x);
    else
    printf("未找到值%d的结点",x);
}


void Menu(){
    printf("        线性表子系统\n");
    printf("---------------------------\n");
    printf("        1--建立\n");
    printf("        2--插入\n");
    printf("        3--删除\n");
    printf("        4--按位置查找\n");
    printf("        5--按元素值查找\n");
    printf("        6--求表长\n");
    printf("        0--返回\n");
    printf("---------------------------\n");
    printf("请输入菜单号(0-6):");
}

int main(){
    LinkList *head;
    DataType x;
    int i,n;
    char ch1,ch2,a;
    ch1='y';
    while(ch1=='y'||ch1=='Y');
    {
        Menu();
        scanf("%c",&ch2);
        getchar();
        switch(ch2){
            case '1':
                head=InitList();
                printf("请输入要建立线性表的长度");
                scanf("%d",&n);
                CreateListL(head,n); 
                printf("建立后的线性表为:");
                DispList(head);
                break;
            case '2':
                printf("请输入要插入的元素位置:");
                scanf("%d",&i);
                getchar();
                printf("请输入要插入的元素值:");
                scanf("%d",&x);
                InsList(head,i,x);
                printf("插入元素%d后的线性表为:");
                DispList(head);
                break;
            case '3':
                printf("请输入要删除的元素的位置:");
                scanf("%d",&i);
                DelList(head,i);
                printf("删除第%d位的元素后的线性表为:\n",i);
                DispList(head);
                break;
            case '4':
                printf("请输入查找的元素位置(大于等于一的整数):");
                scanf("%d",&i);
                SearchList(head,i);
                break;
            case '5':
                printf("请输入查找的整数:");
                scanf("%d",&x);
                Locate(head,x);
                break;
            case '6':
                printf("该线性表的长度为%d",LengthList(head));
                break;
            case '0':
                ch1='n';break;
            default:
                printf("输入有误,请输入0-6进行选择!"); 
        }
        if(ch2!='0')
        {
            printf("\n按回车键继续,任意键返回主菜单\n");
            a=getchar();
            if(a!='\xA')
            {
                getchar();ch1='n';
            }
         } 
    }
} 

  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2021-09-19 15:14
    关注

    while(ch1=='y'||ch1=='Y');
    main方法中的while循环后面多了分号

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月27日
  • 已采纳回答 9月19日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?