#include
#include
#include
struct zg
{
char num[10];
int salary;
struct zg *next;
};
void main()
{
struct zg* head=NULL,*q;
struct zg* creat();
void list(struct zg *);
struct zg* insert(struct zg *h,struct zg *q);
struct zg* del(struct zg *h,char*q);
char snum[10];
head=creat();
printf("输出链表内容如下:\n");
list(head);
q=(struct zg*)malloc(sizeof(struct zg));
printf("输入新的职工号和工资:");
scanf("%s",q->num);
scanf("%d",&q->salary);
q->next=NULL;
head=insert(head,q);
printf("插入结点后的链表内容如下:\n");
list(head);
printf("输入被删除的职工号:");
scanf("%s",snum);
head=del(head,snum);
printf("删除结点后的链表内容如下:\n");
list(head);
}
struct zg* creat()
{
struct zg *h=NULL,*cur=NULL,*last=NULL;
int count=0;
while(1)
{
cur=(struct zg*)malloc(sizeof(struct zg));
printf("Input the %dth data:",count+1);
scanf("%s",cur->num);
scanf("%d",&cur->salary);
cur->next=NULL;
count++;
if (strcmp(cur->num,"0")==0) //输入是否终止
{
free(cur);
break;
}
if(count==1) // 第1个结点吗?
h=cur;
else
last->next=cur;
last=cur;
}
return h;
}
void list(struct zg *h)
{
struct zg *cur;
cur=h;
while(cur!=NULL)
{
printf("%s %8d\n",cur->num,cur->salary);
cur=cur->next;//指向下一个结点
}
}
struct zg* insert(struct zg *h,struct zg *q)
{
struct zg *p1,*p2;
p1=p2=h;
if(h==NULL)
h=q;//链空时
else if(strcmp(q->num,h->num)next=h;
h=q;
}
else
{
while(strcmp(q->num,p1->num)>0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if( strcmp(q->num,p1->num)next=p1;
p2->next=q;
}
else
{ //插入链尾
p1->next=q;
q->next=NULL;
}
}
return h;
}
struct zg* del(struct zg *h,char *s)
{
struct zg *p1,*p2;
p1=p2=h;
//查找待删除结点的位置
while( (strcmp(s,p1->num)!=0)&& p1->next!=NULL)
{
p2=p1;
p1=p2->next;
}
if(strcmp(s,p1->num)!=0)
printf("没有找到该数据结点!\n");
else
{
if(h==p1) //删除第1个结点
{
h=p1->next;
free(p1);
}
else // 删除的结点不是首结点
{
p2->next=p1->next;
free(p1);
}
}
return h;
}
。
全部