13
while (p && p->data!=y) { pre=p; p=p->next; }
if (p)/*找到了值为 y 的结点*/
{ s=(linklist)malloc(sizeof(linknode)); s->data=x; s->next=p; pre->next=s; } }
void main() /*测试程序*/ {linklist head; int y,x;
head=creatlinklist(); /*创建单链表*/
print(head); /*输出单链表*/
printf(\请输入 y 与 x 的值:\\n\ scanf(\ insert(head,y,x); print(head); }
程序的一种运行结果如下图所示:
3.5 设计一个算法,判断一个单链表中各个结点值是否有序。 【答】:
#include \
int issorted(linklist head,char c)
/*当参数 c=’a’时判断链表是否为升序,当参数 c=’d’是判断链表是否为降序*/ { int flag=1;
linklist p=head->next; switch (c)
{case 'a':/*判断带头结点的单链表 head 是否为升序*/
14
while (p &&p->next && flag)
{if (p->data<=p->next->data) p=p->next; else flag=0;
}
break;
case 'd':/*判断带头结点的单链表 head 是否为降序*/ while (p &&p->next && flag)
{if (p->data>=p->next->data) p=p->next; else flag=0;
}
break;
}
return flag; }
int main() /*测试程序*/ { linklist head;
head=creatlinklist(); print(head);
if (issorted(head,'a')) printf(\单链表 head 是升序排列的!\\n\ else
if (issorted(head,'d')) printf(\单链表 head 是降序排列的!\\n\ else printf(\单链表 head 是无序的!\\n\}
程序运行时的三种输出结果如下图所示:
3.6 设计一个算法,利用单链表原来的结点空间将一个单链表就地转置。 【答】:
#include \ void verge(linklist head)
{/*本函数的功能是就地倒置带头结点的单链表*/
15