#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;
}
单链表的操作
最新推荐文章于 2023-03-16 22:12:32 发布