数据结构实验链表合并停车场问题说课.doc

本科生实验报告 实验课程 数据结构与算法分析 学院名称 管理科学学院 专业名称 信息与计算科学 学生姓名 学生学号 指导教师 乐千桤 实验地点 6C402 实验成绩 二〇 一四 年 十 月 二〇 一四 年 十二月 实验一 链表合并 1 实验内容 (1) 创建链表并对其进行输出; (2) 利用指针实现对两个线形链表的合并,并输出其结果。 2 数据结构与算法描述 1)变量及函数的定义 变量/函数名 类 型 说 明 void main () 主函数main() 实现初始化操作,完成对子函数的调用 Node*MergeSList 子函数 定义一个指针函数,返回值类型为NODE类型的一个指针 Node*CreatList() 子函数 创建链表 void outlin(Node *h) 子函数 输出链表的值 2)程序流程图 3 实验数据与实验结果(可用文字描述或贴图的方式进行说明) 1)测试数据 x1= 1 2 3 x2=2 3 5 7 2)实验结果 图1 链表合并的运行结果 4 程序代码清单 #includestdio.h #includemalloc.h typedef struct Node{ //定义一个Node的结构体 int data; Node *next; //*next表示指向链表的后一个元素 }Node; Node *s,*p; Node *MergeSList(Node *head1,Node *head2)//定义一个指针函数,返回值类型为NODE类型的一个指针 { Node *p1=NULL; Node *p2=NULL; Node *pcur; Node *head=NULL;//用于保存Merge之后的链表; // head=NULL; if(head1-next-datahead2-next-data)//找到两个链表的两个第一个节点中更小的一个节点 { head=head1; p1=head1-next; p2=head2-next; } else { head=head2; p1=head1-next; p2=head2-next; } pcur=head; while(p1!=NULLp2!=NULL)//遍历两个链表并比较,把更小的值接在pcur后,pcur只是一个临时链表 { if(p1-datap2-data) { pcur-next=p1; pcur=p1; p1=p1-next; } else if(p1-datap2-data)// { pcur-next=p2; pcur=p2; p2=p2-next; } else if(p1-data==p2-data)//如果存在相同,则删除节点 { p2=p2-next; } } //////////////////////////////////////////////////////////////////////////////// /*循环之后,两个链表要么为都为空,要么其中一个不为空,因为结束循环的条件有限制*/ if(p1!=NULL)//把剩余的节点再接在pcur后 pcur-next=p1; if(p2!=NULL) pcur-next=p2; return head; } Node *CreatList() { int x; Node *headcur; headcur=(Node*)malloc(sizeof(Node)); p=headcur; printf(x=); scanf(%d,x); while(x!=-999)//输入-999代表结束输入 { s=(Node*)malloc(sizeof(Node)); s-data=x; s-next=NULL; p-next=s; p=s; //把s的地址赋给P的下一个,再把s的地址给p scanf(%d,x); } return headcur; } void outlin(Node *h)//输出链表的值 { Node *p; p=h-next; printf(Merged :\n); while(p!=NULL) { printf(%d ,p-data); p=p-next; } printf(\n

文档评论(0)

1亿VIP精品文档

相关文档