厦门理工数据结构实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验报告
实验序号:3 实验项目名称:链式表的操作
int n,i,a;//n为节点数,i为插入元素的位置,a为插入元素的值
LinkList L;
printf("请输入链式表的节点数:");
scanf("%d",&n);
CreateList_L ( L, n ); //初始化链表节点个数为n
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("请输入要插入的值:");
scanf("%d",&a);
ListInsert_L(L,i,a); //在第i个位置插入元素a
ShowList_L(L); //输出链表L中的所有元素
}
运行以上程序,根据要求完成下列题目:
1.参考P30页中的例题
2.10实现ListDelete_L函数,并在主函数中测试;
2.编写一个函数计算值为3的结点个数,并在主函数中测试;
以下题目任选一题:
3.编写一个删除链表中值为3的结点的直接前趋结点的算法,若有多个值为3
的结点,则删除第一个值为3的直接前趋结点;
4.改写CreateList_L函数,使得链表创建时为非降序排列;
5.改写ListInsert_L函数,忽略位置参数,在上述非降序排列链表中插入一个
元素,使得链表依然保持非降序;
6.写一个对单循环链表进行逆序遍历(打印每个结点的值)的算法;
7.编写一个函数,将单链表中值重复的结点删除,使所得的结果表中各结点值双联表牛13,双链表牛13,牛13
第一张图第一个数据是59,截图接没了
;
8. 改写CreateList_L函数,采用尾插法创建带有头节点的单链表。
四、实验结果与数据处理
详细记录程序在调试过程中出现的问题及解决方法。记录程序执行的结果(贴图)。
五、分析与讨论
对上机实践结果进行分析,上机的心得体会。
六、教师评语成绩
附源程序清单:
1
只写改的和后添加的代码
Status ListDelete_L(LinkList &L, int i,ElemType &e)
{
LinkList p,q;
int j;
p=L;
j=0;
while((p->next)&&(j { p=p->next; ++j; } if(!(p=p->next)||j>i-1) return ERROR; q=p->next; p->next=q->next; e=q->data; free(q); return OK; } void main() { int n,i,a;//n为节点数,i为插入元素的位置,a删除相应元素后的显示质LinkList L; printf("请输入链式表的节点数:"); scanf("%d",&n); CreateList_L ( L, n ); //初始化链表节点个数为n printf("请输入要删除的位置:"); scanf("%d",&i); ListDelete_L(L,--i,a); //在第i个位置删除元素 ShowList_L(L); //输出链表L中的所有元素 } 2 # include # include # define ERROR 1 # define OK 0 # define OVERFLOW 1 typedef int ElemType;//给int一个别名ElemType typedef int Status;//给int一个别名Status typedef struct LNode{ ElemType data; struct LNode *next; } LNode, *LinkList; void CreateList_L ( LinkList &L, int n ) { // 输入n 个数据元素的值,建立带头结点的单链表L printf("请输入插入链表的节点值:\n"); LinkList p; int i; L = ( LinkList ) malloc ( sizeof ( LNode ) ); L->next = NULL; // 先建立一个带头结点的空链表 for ( i = n; i > 0; i-- ) { p = ( LinkList ) malloc ( sizeof ( LNode ) ); scanf ("%d" ,&p->data ); p->next = L->next; L->next = p; } } Status ListInsert_L ( LinkList &L, int i, ElemType e ) { // 带头结点的单链表L中第i 个位置之前插入元素e LinkList p,s; int j; //j为计数器 p = L; //p指向L的头节点 j = 0; while ( p && j p = p->next; ++j; } if ( ! p || j >i-1 ) return ERROR; s = ( LinkList ) malloc ( sizeof ( LNode ) ); // 生成新结点 s->data = e; // 使新结点数据域的值为e s->next = p->next; // 将新结点插入到单链表L 中