数据结构实训二Debug

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a973893384/article/details/7927637
#include<stdafx.h>
#include<stdlib.h>
typedef struct student
 {  int  num ; 
    int  score ;
    struct student *next ;
 }ST;
#define   LEN   sizeof(ST)
int  n;
ST *creat(void)
{
	ST *p1,*p2,*head=NULL;
	int n=0;
	p1=(ST *) malloc (LEN); //产生一个新结点
	if(p1==NULL)
	{
		printf("\n No enough memory!\n");exit(0);
	}
	scanf("%d %d",&p1->num,&p1->score);
	while ( p1->num!=0 )
	{   
		n=n+1;//结点个数加1
        if(n==1)head=p1;//若n等于1,则p1当前所指向的是表头结点
        else p2->next=p1;
        p2=p1;//让指针p2指向p1所指向的结点
        p1=(ST *) malloc (LEN);//p1指向新产生的结点
        if(p1==NULL)
		{
			printf("\n No enough memory!\n");exit(0);
		}
        scanf("%d %d",&p1->num, &p1->score);
    }
    p2->next =NULL;         //表尾结点的指针成员赋为空
    free(p1);//释放p1所指向的结点空间
    return(head);
} 
void  list(ST *head)
{  
	ST *p;
    p=head;
    while (p!=NULL)
    {
		printf("%d,%d\n",p->num,p->score);
        p=p->next ;   
    }
}

ST *del(ST *head, int  num)
{
	ST *p,*q=NULL;
    p=head;
    while((num!=p->num)&&(p->next!=NULL))
    {
		q=p;
		p=p->next;
	}
    if(num==p->num)
    {
		if(p==head)head=p->next;//删除结点为表头结点  
        else q->next=p->next;//删除结点为表尾结点或中间结点
        free(p);        //释放已删除的结点空间
        n=n-1;     //链表的结点个数减1
		printf("deleted ! \n");    
     }
     else printf("can not delete!\n");      
     return(head);//返回链表的头指针

}

ST *insert(ST *head)
{
	ST *p0,*p1,*p2;
    p1=head;
	p0=(ST*)malloc(LEN);
    scanf("%d%d",&p0->num,&p0->score);
    if(head==NULL)//如果是空链表,则新结点是链表的表头结点
	{
		head=p0;
		p0->next=NULL;
	}
    else
	{
		while((p0->num>p1->num)&&(p1->next!=NULL))
        {
			p2=p1;
			p1=p1->next;
		}//找到要插入结点的位置
        if(p0->num<=p1->num)     
        {
			if(head==p1)head=p0;//插入结点作表头结点
			else p2->next=p0;//插入结点作中间结点
            p0->next=p1;
		}
        else  
        {
			p1->next=p0;p0->next=NULL;
		}//插入结点作表尾结点
     }  
     n++;//链表的结点个数加1
     return( head ) ;
  } 
void main()
 {
	ST *h=NULL;
    h=creat();
    list(h);
    h=del(h,2);
    list(h);
    h=insert(h);
    list(h);
}


猜你喜欢

转载自blog.csdn.net/a973893384/article/details/7927637