单链表的操作

#include<stdio.h>
#include<stdlib.h>
typedef struct{
	char name[10];
	int age;
	int adress;
}Student;
 typedef struct Node{
	  Student data;
	struct  Node *Next;
  }Node;
 int Insert( Node *h,int i,Student x)//前插法
 { Node *p,*s;
   int j;
   p=h;
   j=1;
   while(p!=NULL&&j<=i-1)
   {p=p->Next;
   j++;
   }
   /*if(j!=i-1)
   {printf("插入位置不合理\n");
   return 0;
   }*/
   if((s=(Node *)malloc(sizeof(Node)))==NULL)  return 0;
   s->data=x;
   s->Next=p->Next;
   p->Next=s;
   return 0;
 }
 void Delete(Node *h,int i)//删除结点
 {  Node *p,*s;
    int j;
	p=h;
	j=1;
	while(p!=NULL&&j<=i-1)
	{ p=p->Next;
	  j++;
	}
	s=p->Next;
	p->Next=p->Next->Next;
	free(s);
 }
 void Creat_list(Node *h)//尾插法建立单链表
 {Node *p,*r;
   r=h;
   p=NULL;
   Student a[100];
   int n,i;
   printf("请输入单链表节点个数:");
   scanf("%d",&n);
   for(i=0;i<n;i++)
   {printf("请输入第%d个节点的值:",i+1);
   scanf("%s%d%d",a[i].name,&a[i].age,&a[i].adress);
   }
   for(i=0;i<n;i++)
   { p=(Node *)malloc(sizeof(Node));
    if(p==NULL)
	{ return;}
	p->data=a[i];
	p->Next=NULL;
	r->Next=p;
	r=p;
   }
 }
int init_Node(Node **h)
 { if((*h=(Node *)malloc(sizeof(Node)))==NULL)  return 0;
   (*h)->Next=NULL; 
   return 1;
}
 void print_Node(Node *h)
 { Node *p=h->Next;
   while(p!=NULL)
   {printf("%s%5d%5d\n",p->data.name,p->data.age,p->data.adress);
   p=p->Next;
   }
 }
 int main()
 {Node *head;
 Student x;
 int i,j;
 init_Node(&head);
 Creat_list(head);
 printf("请输入x的值:");
 scanf("%s%d%d",x.name,&x.age,&x.adress);
 printf("请输入插入的位置:");
 scanf("%d",&i);
 Insert(head,i,x);
  print_Node(head);
  printf("请输入删除的位置:");
  scanf("%d",&j);
  Delete(head,j);
  print_Node(head);
  return 0;
 }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值