本题要求实现两个函数,可在加监督元单链表中进行插入和删除操作。
插入操作完成后要求链表仍然有序。
删除操作时,如链表中无此元素x,输出:no x。
最后都需要输出链表中所有元素值。
函数接口定义:
void ins(ptr h,int x);
void del(ptr h,int x);
其中 ins
完成在链表h中将元素x插入到表中, del
完成在甸表h中完成删除元素x的操作。
裁判测试程序样例:
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
}snode,*ptr;
void output(ptr h)//输出链表中的元素值
{
ptr p;
p=h;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
ptr head,last;
int x,y,i;
head=last=(ptr)malloc(sizeof(snode));//链表初始化
last->next=NULL;//构造带监督元的单链表
for(i=1;i<4;i++)
ins(head,3*i);//在链表中先插入3个元素3,6,9
scanf("%d",&x);
if(x==1)
{
scanf("%d",&y);//输入插入元素值
ins(head,y);
}
else if(x==2)
{
scanf("%d",&y);//输入删除元素值
del(head,y);
}
printf("list is:");
output(head->next);
return 0;
}
/* 请在这里填写答案 */
输入样例:
输入两个元素a,b,a=1表示做插入操作,b为插入元素。输出链表中所有元素。若a=2表示做删除操作,b为需删除元素。如无此元素,输出no b,换行后输出链表中所有元素值
1 7
输出样例:
list is:3 6 7 9
代码实现:
void ins(ptr h, int x) {
ptr p = h, q;
while (p->next != NULL && p->next->data < x) {
p = p->next;
}
q = (ptr)malloc(sizeof(snode));
q->data = x;
q->next = p->next;
p->next = q;
}
void del(ptr h, int x) {
ptr p = h, q;
while (p->next != NULL && p->next->data != x) {
p = p->next;
}
if (p->next != NULL) {
q = p->next;
p->next = q->next;
free(q);
} else {
printf("no %d\n", x);
}
} //EZZ