• 链表的创建, 出现问题


    #include <stdio.h>
    #include <stdlib.h>
    struct Node
    {
    	int data;
    	struct Node *pnext;
    } ;
    
    struct Node * creat_list(void);
    
    int main(int argc, char *argv[])
    {
    	struct Node * head =NULL;	
    	head = creat_list(void);
    	//ou_list(head);	
    	return 0;
    }
    
    struct Node * creat_list(void)
    {
     struct Node *head=(struct Node *)malloc(sizeof(struct Node));
    	
    	
    	if(head==NULL)
    	{
    		printf("分配不成功,推出程序 ");
    		exit(-1); 
    		
    	}
    	
    	struct Node *q;
    	q=head;
    	q->pnext=NULL;
    	
    	int i;
    	int len;
    	int val;
    	
    	printf("几个节点?len=");
    	scanf("%d",&len);
    	for(i=0;i<len;i++)
    	{
    		printf("请输入第%d个节点的信息:",i+1);
    		scanf("%d",&val);
    		struct Node *new1=(struct Node*)malloc(sizeof(struct Node));
    		if(new1==NULL)
    		{
    			printf("分配不成功,推出程序 ");
    		exit(-1);
    		}
    		new1->data =val;
    		new1->pnext=NULL;
    		q->pnext = new1;
    		q=new1;		
    		 
    	}	
    	return head;	
    }
     
    c错误:
    请找到定位
    [Error] C:\Users\Administrator\Documents\C-Free\Temp\未命名1.cpp:14: error: expected primary-expression before "void"
     
    解决方案:creat_list () 多写了 void  将其去掉;
     
    完成解决后的完美体验:
    热烈的笑脸
    #include <stdio.h>
    
    #include <stdlib.h>
    
    struct Node
    
    {
    
    	int data;
    
    	struct Node *pnext;
    
    } ;
    
    struct Node * creat_list(void);
    
    void ou_list(struct Node *phead);
    
    int main(int argc, char *argv[])
    
    {
    
    	struct Node * phead =NULL;	
    
    	phead = creat_list();//这里如果编写成  creat_list(void) 会提示错误
    
    	// 
    
        ou_list(phead);	
    
    	return 0;
    
    }
    
    struct Node * creat_list(void)
    
    {
    
     struct Node *head=(struct Node *)malloc(sizeof(struct Node));
    
     		struct Node *q;
    
    	if(head==NULL)
    
    	{
    
    		printf("分配不成功,推出程序 ");
    
    		exit(-1); 
    
    		
    
    	}
    
    	
    
    	q=head;
    
    //	q->pnext=NULL;
    
    	
    
    	int i;
    
    	int len;
    
    	int val;
    
    	
    
    	printf("几个节点?len=");
    
    	scanf("%d",&len);
    
    	for(i=0;i<len;i++)
    
    	{
    
    		printf("请输入第%d个节点的信息:",i+1);
    
    		scanf("%d",&val);
    
    		struct Node *new1=(struct Node*)malloc(sizeof(struct Node));
    
    		if(new1==NULL)
    
    		{
    
    		printf("分配不成功,推出程序 ");
    
    		exit(-1);
    
    		}
    
    		new1->data =val;
    
    		new1->pnext=NULL;
    
    		q->pnext = new1;
    
    		q=new1;		
    
    		 
    
    	}	
    
    	return head;	
    
    }
    
    bool is_empty(struct Node *phead)
    
    {
    
    	if(phead ==NULL)
    
    	 return true;
    
    	 else 
    
    	 return false;
    
    }
    
    void ou_list(struct Node *phead)
    
    {
    
    	if(is_empty(phead))
    
    	printf("空链表");
    
    	
    
    	struct Node *q;
    
    	q=phead->pnext;
    
    	while(!is_empty(q))
    
    	// 这里是从首节点开始遍历,所以不能写成是 while(!is_empty(phead)) 
    
    	{
    
    		printf("%d\n",q->data);
    
    		q= q->pnext;	
    
    	}
    
    	return ;
    
    	
    
    }

    此程序如果用vs2010 编译的话,需要把 变量 放到最前面 相当于全局了 ,同样的指针,q需要用取地址符号来判断是否为空。

    简单表示图

    image

    26A3A_NFC3EMV(J[6OOR%N2那么此上的链表是  具有 头结点的时候,不具有头结点的代码又该如何变幻嗯?

    //有头结点的例子 
    
    #include <stdio.h>
    
    #include <stdlib.h>
    
    struct Node
    
    {
    
    	int data;
    
    	struct Node *pnext;
    
    };
    
    struct Node * creat_list(void);
    
    void out_list(struct Node* p);
    
    int main(int argc, char *argv[])
    
    {
    
    	struct Node* head=creat_list();//=NULL;	
    
    //	head = creat_list(void);
    
    	out_list(head);	
    
    	return 0;
    
    }
    
    struct Node * creat_list(void)
    
    {
    
    	struct Node *q;	
    
    	int i;
    
    	int len;
    
    	int val;
    
    	struct Node *new1;
    
        struct Node *head;//=(struct Node *)malloc(sizeof(struct Node));
    
    	
    
    /*	
    
    	if(head==NULL)
    
    	{
    
    		printf("分配不成功,推出程序 ");
    
    		exit(-1); 
    
    		
    
    	}
    
    	
    
    	q=head;
    
    	q->pnext=NULL;
    
    	
    
    */
    
    	
    
    	printf("几个节点?len=");
    
    	scanf("%d",&len);
    
    	for(i=0;i<len;i++)
    
    	{
    
    		printf("请输入第%d个节点的信息:",i+1);
    
    		scanf("%d",&val);
    
    		new1=(struct Node*)malloc(sizeof(struct Node));
    
    		if(new1==NULL)
    
    		{
    
    			printf("分配不成功,推出程序 ");
    
    	    	exit(-1);
    
    		}
    
    		new1->data =val;
    
    		new1->pnext=NULL;
    
    		if(i==0)
    
    		{
    
    			head=new1;
    
    			q=new1;
    
    		}
    
    		else
    
    		{
    
    			q->pnext = new1;
    
    		    q=new1;	
    
    		}
    
    		
    
    		 
    
    	}	
    
    	return head;	
    
    }
    
    void out_list(struct Node* p)
    
    {
    
    	//struct Node *q;
    
    	if(p==NULL)
    
    		printf("this list is null");
    
    	else
    
    	{// q= p->pnext;
    
    		while(p!=NULL)
    
    		{
    
    			printf("%3d\n",p->data);
    
    			p=p->pnext;
    
    		}
    
    	}
    
    	printf("\n");
    
    }
  • 相关阅读:
    JAVA中的流-简介(二)
    JAVA中的流-简介(一)
    Java中内部类简介
    应用小练习-自定义栈
    集合知识点(二)
    集合知识点(一)
    JAVA中的正则表达式简介
    从头文件中学习sfr和sbit
    PCB中实现元器件旋转一个角度放置
    DXP中插入LOGO字体方法(2)
  • 原文地址:https://www.cnblogs.com/yoyov5123/p/2938434.html
Copyright © 2020-2023  润新知