程序填空题:链表的插入和删除
本题完成加头监督元链表的表头插入和删除,并将结果输出。
```c++
#include
#include
typedef struct node
{
int data;
struct node *next;
}Snode,*ptr;
void insert(ptr h,int x)//将x插入在表头位置,即监督元之后
{
ptr p;
p=(ptr)malloc(sizeof(Snode));
p->data=x;
@@[p->next=h->next](1);
@@[h->next=p](1);
}
void output(ptr h)//输出链表中的元素,即输出除监督元以外的所有元素
{
ptr p;
@@[p=h->next](1);
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void del(ptr h)//删除表头元素,即监督元后第一个元素结点
{
ptr p;
@@[p=h->next](1);
@@[h->next=p->next](1);
free(p);
}
int main()
{
ptr head;
int x;
head=(ptr)malloc(sizeof(Snode));
head->next=NULL;
scanf("%d",&x);
while(x!=0)
{
insert(head,x);
scanf("%d",&x);
}
output(head);
del(head);
output(head);
return 0;
}
```
答案:
第1空:p->next=h->next
第2空:h->next=p
第3空:p=h->next
第4空:p=h->next
第5空:h->next=p->next
```c++
#include
#include
typedef struct node
{
int data;
struct node *next;
}Snode,*ptr;
void insert(ptr h,int x)//将x插入在表头位置,即监督元之后
{
ptr p;
p=(ptr)malloc(sizeof(Snode));
p->data=x;
@@[p->next=h->next](1);
@@[h->next=p](1);
}
void output(ptr h)//输出链表中的元素,即输出除监督元以外的所有元素
{
ptr p;
@@[p=h->next](1);
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void del(ptr h)//删除表头元素,即监督元后第一个元素结点
{
ptr p;
@@[p=h->next](1);
@@[h->next=p->next](1);
free(p);
}
int main()
{
ptr head;
int x;
head=(ptr)malloc(sizeof(Snode));
head->next=NULL;
scanf("%d",&x);
while(x!=0)
{
insert(head,x);
scanf("%d",&x);
}
output(head);
del(head);
output(head);
return 0;
}
```
答案:
第1空:p->next=h->next
第2空:h->next=p
第3空:p=h->next
第4空:p=h->next
第5空:h->next=p->next