收藏 分销(赏)

数据结构顺序表及单链表基本操作.doc

上传人:仙人****88 文档编号:7855467 上传时间:2025-01-22 格式:DOC 页数:4 大小:47.50KB 下载积分:10 金币
下载 相关 举报
数据结构顺序表及单链表基本操作.doc_第1页
第1页 / 共4页
数据结构顺序表及单链表基本操作.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
实验一 顺序表和单链表的基本操作 一、 实验目的 a) 掌握线性顺序存储结构的形式与特点; b) 熟练利用顺序存储结构实现线性表的基本操作; c) 熟练掌握顺序存储结构中的算法实现; d) 掌握线性表链式存储结构的特点; e) 熟练利用链式存储结构实现线性表的基本操作; f) 熟练掌握链式存储结构中的算法实现。 二、 知识准备 a) 线性表顺序结构的表示; b) 顺序表的基本操作:顺序表的建立、查找、插入、删除; c) 线性表链式存储结构的表示; d) 链式表的基本操作:链式表的建立、查找、插入、删除; 链式存储结构表不能随机存取,只能设置一个指针变量,从表头逐步向后移动来实现插入或删除数据的位置,找到后再进行具体操作。 三、 实验内容 1、 下面提供的程序实现的是:设有两个按元素值递增有序的顺序表la和lb,编写程序将la表和lb表归并成一个新的递增有序的顺序表lc(值相同的元素均保留在lc表中)。*/ # include "datastru.h" # include <stdio.h> void merge_sqlist(SEQUENLIST la,SEQUENLIST lb,SEQUENLIST *lc) { /*两有序表合并*/ int i , j , k ; i = j = k = 1 ; while( ____i<=la.last && j<=lb.last___)//la没有到达链表尾部并且lb也没有到达链表尾部 if( la.datas[i] <= lb.datas[j])//如果la的数据小于lb的数据 { _____ lc->datas[k]=la.datas[i]____ ; //就把la的数据放到lc中;注意lc是地址变量 k++ ; i++ ;} else { ____lc->datas[k]=lb.datas[j]____; //否则就把lb的数据放到lc中 k++ ; j++ ;} while( _____i<=la.last____ ) //如果la没有到达尾部 { _____lc->datas[k]=la.datas[i] ____ ; //就把剩余的la数据放到lc后面 k++ ; i++;} while( ____ j<=lb.last ______ ) //如果lb没有到达尾部 { ___lc->datas[k]=lb.datas[j]__ ; //就把剩余的lb数据放到lc后面 k++; j++;} lc->last =la.last+lb.last; return; } main( ) { SEQUENLIST la, lb, lc; int i, k, m; printf("请输入la顺序表元素,元素为整型量,用空格分开,-99为结束标志 :"); la.last = 0; i = 0; scanf("%d",&i); while (i != -99) {/*输入la顺序表元素,建立有序表*/ k = la.last; while((k>=1) && ( i<la.datas[k])) k--; for(m = la.last; m >= k+1; m--) la.datas[m + 1] = la.datas[m]; la.datas[k + 1] = i; la.last++; scanf("%d",&i);} printf("\n\n请输入lb顺序表元素,元素为整型量,用空格分开,-99为结束标志 :"); lb.last = 0; i = 0; scanf("%d",&i); while (i != -99) {/*输入lb顺序表元素,建立有序表*/ k = lb.last; while((k>=1) && ( i<lb.datas[k])) k--; for(m = lb.last; m >= k+1; m--) lb.datas[m + 1] = lb.datas[m]; lb.datas[k + 1] = i; lb.last++; scanf("%d",&i); } printf("\nla有序表元素列表 :"); for (i = 1; i <= la.last; i++) printf("% d",la.datas[i]); printf("\n"); printf("\nlb有序表元素列表 :"); for (i = 1; i <= lb.last; i++) printf("% d",lb.datas[i]); printf("\n"); merge_sqlist (la, lb, &lc); printf("\n合并后lc有序表元素列表 :"); for (i = 1; i <= lc.last; i++) printf(" %d",lc.datas[i]); printf("\n"); } 在做的过程中我所遇到的问题: 发现头文件【# include "datastru.h"】 无法被系统识别?在同学的帮助下得出答案:需要将目标程序“另存为”存储为【*.cpp】格式的文件。 2、设L为带头结点的单链表,表中元素值无序,编写程序删除表中值相同的多余元素。*/ #include "datastru.h" #include <stdio.h> #include <malloc.h> void delete1(LINKLIST *a){ LINKLIST *la, *p, *q; la = a->next; //把a的第1个元素 while(la != NULL) { q = la; //q指向la p = q->next; // p指向la的下一个节点 while(p != NULL) {if (p->data==la->data) //如果p指向的数据和la指向的数据一致 { p = p->next; //p指向下一个节点 q->next = p; //q的下一个节点为p,这两条语句即为删除p } else { p = p->next; q = q->next;}//否则,p,q指针都往后走 } la = la->next; } } int count_head(LINKLIST *head){ /*带头结点的单链表: 输出单链表元素值并计数*/ int i = 0; LINKLIST *p; p = head->next; printf("输出单链表元素值 : "); while(p != NULL) {i++; printf(" %c",p->data); p = p->next;} printf("\n"); return i; } LINKLIST *creatlink_head_rail(LINKLIST *head){ /*用尾插入法建立带头结点的单链表*/ LINKLIST *last, *t; char ch; t = (LINKLIST *)malloc(sizeof(LINKLIST)); head = t; last = t; t->next = NULL; printf("单链表元素值为单个字符, 连续输入,$为结束字符 : "); while ((ch = getchar()) != '$') {t = (LINKLIST *)malloc(sizeof(LINKLIST)); t->data = ch; t->next = NULL; last->next = t; last = t;} return (head); } main() { LINKLIST *head = NULL; int num; printf("\n 建立单链表\n\n"); head = creatlink_head_rail(head); fflush(stdin); num = count_head(head); printf("\n 删除重复元素后\n\n"); delete1(head); num = count_head(head); } 选做: 3、程序lb1.2.c实现的是建立含有若干个学生信息(包括学号、姓名、成绩)的链式存储结构表。我们实现:对链式存储结构线性表实现查找、插入、删除和逆置操作,并将结果在屏幕上输出。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服