printf(\合 并 生 成 升 序 链 表\\n\ printf(\分 解 链 表\\n\ printf(\退 出\\n\\n\}
/*初始化空表*/
Status Init_Linklist(LinkList &L) {
L=(LinkList)malloc(sizeof(Lnode)); if(!L) return ERROR; L->next=NULL; return OK;
}
/*尾插法建立单链表*/
Status Creat_Linklist(LinkList &L) { int x;
LinkList p,rear; Init_Linklist(L); rear = L;
printf(\输入-1表示输入结束\\n\ while(scanf(\ {
p = (LinkList)malloc(sizeof(Lnode)); if(!p) return ERROR; p->data = x; rear->next = p; rear = p; }
rear->next = NULL; return OK; }
/*单链表遍历*/
void Disp_Linklist(LinkList L) {
LinkList p;
16
p = L->next; while(p) {
printf(\ p = p->next; }
printf(\}
/*计算单链表长度*/ int length_Linklist(LinkList L) {
int count = 0; /*count表示单链表长度*/ LinkList p;
return count; }
/*单链表逆置*/
void Reverse_Linklist(LinkList L) {
LinkList p, q ; }
/*删除值为偶数的结点*/ void DelEven_Linklist(LinkList L) {
LinkList p, q; }
/*在有序单链表中插入元素,链表仍然有序,插入成功返回OK,插入失败返回ERROR*/ Status Insert_Linklist(LinkList L, int x) { ; }
17
/*创建非递减有序单链表,创建成功返回OK,创建失败返回ERROR*/ Status CreatOrder_Linklist(LinkList &L) { }
/*两个非递减有序单链表La和Lb合并成一个非递增有序链表Lc*/ void MergeDescend_Linklist(LinkList La, LinkList Lb, LinkList &Lc) { }
/*两个非递减有序单链表La和Lb合并成一个非递减有序链表Lc*/ void MergeAscend_Linklist(LinkList La, LinkList Lb, LinkList &Lc) {
LinkList pa, pb, pc; pa = La->next; pb = Lb->next; pc = Lc = La; while(pa && pb) {
if(pa->data <= pb->data) {
pc->next = pa; pc = pa; pa = pa->next; } else {
pc->next = pb; pc = pb; pb = pb->next; } }
pc->next = pa ? pa : pb; free(Lb); }
/*链表La按值分解成两个链表,La全部为奇数,Lb全部为偶数*/ void Split_Linklist(LinkList La, LinkList &Lb) { }
18
main.cpp
#include \int main() {
int choice, length; LinkList L, La, Lb, Lc; while(1) {
menu();
printf(\选择你的操作:\ scanf(\ switch(choice) {
case 1:
if(Creat_Linklist(L))
printf(\单链表创建成功\\n\ else
printf(\单链表创建失败\\n\ break; case 2:
Disp_Linklist(L); break; case 3:
length = length_Linklist(L);
printf(\单链表长度为:%d\\n\ break; case 4:
Reverse_Linklist(L);
printf(\逆置后的链表为:\\n\ Disp_Linklist(L); break; case 5:
DelEven_Linklist(L); printf(\新链表为:\\n\ Disp_Linklist(L); break; case 6:
if(CreatOrder_Linklist(L))
19
{
printf(\值有序链表为:\\n\ Disp_Linklist(L); } else
printf(\单链表创建失败\\n\ break; case 7:
} } }
CreatOrder_Linklist(La); CreatOrder_Linklist(Lb);
MergeDescend_Linklist(La, Lb, Lc);
printf(\合并后的新链表为:\\n\ break; case 8:
CreatOrder_Linklist(La); CreatOrder_Linklist(Lb);
MergeAscend_Linklist(La, Lb, Lc);
printf(\合并后的新链表为:\\n\ break; case 9:
Creat_Linklist(L); Split_Linklist(L, Lb);
printf(\分裂后的新链表为:\\n\ Disp_Linklist(L); Disp_Linklist(Lb); break; case 0: return 0; default:
printf(\输入错误,请重新输入\\n\20