求指点!数据结构C语言版单链表的建立,程序每次运行到输入完甚至还没输完结点值的时候就弹出停止工作=-=vc++

C语言 码拜 8年前 (2017-05-06) 2959次浏览
#include<stdio.h>
#include<stdlib.h>
/************************************/
/* 链表实现的头文件,文件名slnklist.h */
/************************************/
typedef int datatype;
 typedef struct link_node
 {
   int info;
   struct link_node *next;
 }node;
 node *creatlink(node *head,int n)
 {
   node *q;
  node *p=head;int i;
   for(i=0;i<n;i++)
   {
		q=(node*)malloc(sizeof(node));/*分配空间*/
		printf("\n请输入链表的结点值:");
		scanf("%d",q->info);/*设置新结点*/
		if(!head)
		{/* 插入的结点作为单链表的第一个结点*/
			q->next=head;  
			head=q;
		 }
		 else 
		 {
			p->next=q;
			q->next=NULL;
			p=q;
		 }
   }
   return head;
 }
  void main()
 {
	node *head;
	int n,i;
	printf("请输入链表的结点个数:");
	scanf("%d",&n);
	creatlink(head,n);
	printf("--");
	for(i=0;i<n;i++)
	{
		if(head)
		{
			printf("%d",head->info);
			head=head->next;
		}
	}
  }
解决方案

10

①main函数里的node *head改成 node *head=new node;
指针在用之前记得要初始化。
②creatlink函数中的:scanf(“%d”,q->info); 改成scanf(“%d”,&(q->info));
scanf要有取址符号,不然运行的时候会报错。

#include<stdio.h>
#include<stdlib.h>
/************************************/
/* 链表实现的头文件,文件名slnklist.h */
/************************************/
typedef int datatype;
 typedef struct link_node
 {
   int info;
   struct link_node *next;
 }node;
 node *creatlink(node *head,int n)
 {
   node *q;
  node *p=head;int i;
   for(i=0;i<n;i++)
   {
        q=(node*)malloc(sizeof(node));/*分配空间*/
        printf("\n请输入链表的结点值:");
        scanf("%d",&(q->info));/*设置新结点*/
		printf("%d",q->info);
        if(!head)
        {/* 插入的结点作为单链表的第一个结点*/
            q->next=head;  
            head=q;
         }
         else 
         {
            p->next=q;
            q->next=NULL;
            p=q;
         }
   }
   return head;
 }
  void main()
 {   
    node *head=new node
		;
    int n,i;
    printf("请输入链表的结点个数:");
    scanf("%d",&n);   
    creatlink(head,n);
    printf("--");
    for(i=0;i<n;i++)
    {
        if(head)
        {
            printf("%d",head->info);
            head=head->next;
        }
    }
 
  }

25

#include<stdio.h>
#include<stdlib.h>
/************************************/
/* 链表实现的头文件,文件名slnklist.h */
/************************************/
typedef int datatype;
typedef struct link_node
{
    int info;
    struct link_node *next;
}node;
node *creatlink(node *head, int n)
{
    node *p, *q;
    int i;
    p = head;
    for(i = 0; i < n; i++) {
        q = (node*)malloc(sizeof(node));/*分配空间*/
        printf("\n请输入链表的结点值:");
        scanf("%d", &q->info);/*这个地方是需要加&,原因是是要地址*/
        if(!head) { /*这个地方需要传入的head是初始化为NULL,所以在main里要初始化*/
            q->next = head;
            head = q;
            p = head;    /*这句是需要的,不然下面else的p和head连不上*/
        }
        else
        {
            q->next = NULL;
            p->next = q;
            p = q;
        }
    }
    return head;
}
void print_link(node *head)
{
    node *pcur = head;
    while (pcur) {
        printf("%d\t", pcur->info);
        pcur = pcur->next;
    }
    putchar(10);
}
int main()
{
    node *head = NULL; /* must initialize */
    int n;
    printf("请输入链表的结点个数:");
    scanf("%d", &n);
    head = creatlink(head, n);
    printf("--\n");
    print_link(head);
/*输出功能建议使用自定义函数,这样代码可读性增加,并且好维护*/
    /*
    for(i=0;i<n;i++)
    {
        if(head)
        {
            printf("%d",head->info);
            head = head->next;
        }
    }*/
    return 0;
}

5

建议注意本人的代码风格~注释应该少加,通过函数名和变量名来理解代码的逻辑

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求指点!数据结构C语言版单链表的建立,程序每次运行到输入完甚至还没输完结点值的时候就弹出停止工作=-=vc++
喜欢 (0)
[1034331897@qq.com]
分享 (0)