#include <stdio.h>
#include<malloc.h>
//#define NULL 0
#define LEN sizeof(struct student)
/***********************建立链表********************/
struct student
{
long num
float score
struct student *next
}
int n
struct student *creat(void)
{
struct student *head
struct student *p1,*p2
n=0
p1=p2=(struct student *)malloc(LEN)
scanf("%ld,%f",&p1->num,&p1->score)
head=NULL
while(p1->num!=0)
{
n=n+1
if(n==1) head=p1
else p2->next=p1
p2=p1
p1=(struct student *)malloc(LEN)
scanf("%ld,%f",&p1->num,&p1->score)
}
p2->next=NULL
return(head)
}
/*******************输出链表 ************************/
void print(struct student *head)
{
struct student *p
printf("\nNow, These %d records are:\n",n)
p=head
if(head!=NULL)
do
{
printf("%ld%5.1f\n",p->num,p->score)
p=p->next
}while(p!=NULL)
}
/******************对链表的删除***********************/
struct student *del(struct student *head,long num)
{
struct student *p1,*p2
if(head==NULL)
{
printf("\nlist null! \n")
return head
}
p1=head
while(num!=p1->num&&p1->next!=NULL)
{
p2=p1
p1=p1->next
}
if(num==p1->num)
{
if(p1==head) head=p1->next
else p2->next=p1->next
printf("delete:%ld\n",num)
n=n-1
}
else printf("%ld not enn found!\n",num)
return(head)
}
/*******************对链表的插入************************/
struct student *insert(struct student *head,struct student *stud)
{
struct student *p0,*p1,*p2
p1=head
p0=stud
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=n+1
return(head)
}
void main()
{
struct student *head,stu
long del_num
printf("input records:\n")
head=creat()
print(head)
printf("\ninput the deleted number:")
scanf("%ld",&del_num)
head=del(head,del_num)
print(head)
printf("\ninput the inserted record:")
scanf("%ld,%f",&stu.num,&stu.score)
head=insert(head,&stu)
print(head)
}
#include<stdio.h>#include<stdlib.h>
struct chain
{
int value
struct chain *next
}
struct chain *create()
{
struct chain *head,*tail,*p
int x
head = tail = NULL
while(scanf("%d",&x)==1)
{
p=(struct chain*)malloc(sizeof(struct chain))
p->value=x
p->next=NULL
if(head==NULL)
head = tail = p
else
tail=tail->next=p
}
return head
}
struct chain *inlink(struct chain *head,int a,int b)//int a代表要插入的节点,int b代表创建节点的数据域
{
struct chain *p,*q,*s
s = (struct chain *)malloc(sizeof(struct chain))
s->value=b
if(head==NULL)
{
head = s
head->next = NULL
}
if(head->value == a)
{
s->next=head
head = s
}
else
{
p=head
while((p->value!=a)&&(p->next!=NULL))
{
q=p
p=p->next
}
if(p->value == a)
{
q->next = s
s->next = p
}
else
{
p->next=s
s->next=NULL
}
}
return (head)
}
struct chain *dellink(struct chain *head,int a) //int a代表要删除的节点
{
struct chain *q,*p
if(head == NULL)
printf("找不到节点!\n")
else if(head->value == a)
{
p = head
head = head->next
}
else
{
p=head
while((p->value!=a)&&(p->next!=NULL))
{
q=p
p=p->next
}
if(p->value != a)
printf("链表不存在此节点!\n")
else
{
q->next = p->next
free(p)
}
}
return (head)
}
void main()
{
struct chain *p,*q
q=create() //链表的创建;
//q=inlink(create(),3,1) //链表的插入;
//q=dellink(create(),2) //链表的删除;
while(q){ //输出链表;
printf("%d\n",q->value)
p=q->next
free(q)
q=p
}
}
这样可以么?