文档库 最新最全的文档下载
当前位置:文档库 › 链表题目

链表题目

链表题目
链表题目

实验1

输入若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束,用单向链表组织这些学生信息后,再按顺序输出。

输入:输出:

1 zhang 78 1 zhang 78

2 wang 80 2 wang 80

3 li 75 3 li 75

4 zhao 8

5 4 zhao 85

实验2

输入若干个正整数(输入-1为结束标志),并建立一个单向链表,将其中的偶数值结点删除后输出。

输入:

1 2 3 4 5 6 7 -1

输出:

1 3 5 7------*/

实验3

有2个已按升序排序的单向链表,头指针分别为list1、list2,链表中每一结点的数据域是一个整数。请编写一个函数,把2个链表拼成1个链表并对新链表升序排列后,返回新链表。编写主程序验证实现。

输入:

1 3 5 7 -1

2 4 6 -1

输出:

1 2 3 4 5 6 7

实验4

有一个单向链表,头指针为L,结点的数据域是一个整数,将链表L中只保留奇数节点(注意是删除原链表中的偶数节点),并输出新建链表。

输入:

1 2 3 4 5 6 7 -1

输出:

1 3 5 7

1:

#include

#include

#include

struct m

{

int no;

char name[100];

int g;

struct m * next;

}*head = NULL;

int add (int n,char *s,int g)

{

struct m *p,*t = new m;

if (t == NULL)

return 0;

t->no = n;

t->g = g;

strcpy (t->name,s);

t->next = NULL;

if (head == NULL)

{

head = t;

return 1;

}

p = head;

while (p->next != NULL)

p = p->next;

p->next = t;

return 1;

}

int pri (void)

{

struct m *p = head;

if (head)

printf ("学号姓名成绩\n");

while (p != NULL)

{

printf ("%4d %6s %4d\n",p->no,p->name);

p = p->next;

}

}

int main()

{

int n,g;

char s[100];

while (scanf ("%d",&n),n)

{

scanf ("%s %d",s,&g);

add (n,s,g);

}

pri ();

system ("PAUSE");

return 0;

}

2:

#include

#include

#include

struct m

{

int num;

struct m * next;

}*head = NULL;

int add (int num)

{

struct m *p,*t = new m;

if (t == NULL)

return 0;

t->num = num;

t->next = NULL;

if (head == NULL)

{

head = t;

return 1;

}

p = head;

while (p->next != NULL)

p = p->next;

p->next = t;

return 1;

}

int del (void)

{

struct m *p = head;

struct m *t = head;

while (p!= NULL)

{

if (!(p->num % 2))

{

t->next = p->next;

free (p);

p = t;

}

t = p;

p = p->next;

}

}

int pri (void)

{

struct m *p = head;

while (p != NULL)

{

printf ("%d",p->num);

if (p->next != NULL)

printf (" ");

else

printf ("\n");

p = p->next;

}

return 0;

}

int main()

{

int n;

while (scanf ("%d",&n),n != -1)

add(n);

del();

pri ();

system ("PAUSE");

return 0;

}

#include

#include

#include

struct m

{

int num;

struct m * next;

}*head = NULL;

int add (int num)

{

struct m *p,*t = new m;

if (t == NULL)

return 0;

t->num = num;

t->next = NULL;

if (head == NULL)

{

head = t;

return 1;

}

if (head->num > t->num)

{

t->next = head;

head = t;

return 1;

}

p = head;

while (p->next != NULL)

{

if (p->next->num > t->num)

break;

p = p->next;

}

t->next = p->next;

p->next = t;

return 1;

}

int pri (void)

{

struct m *p = head;

while (p != NULL)

{

printf ("%d",p->num);

if (p->next != NULL)

printf (" ");

else

printf ("\n");

p = p->next;

}

return 0;

}

int main()

{

int n;

while (scanf ("%d",&n),n != -1)

add(n);

while (scanf ("%d",&n),n != -1)

add(n);

pri ();

system ("PAUSE");

return 0;

}

4:

#include

#include

#include

struct m

{

int no;

int num;

struct m * next;

}*head = NULL;

int add (int num,int no)

{

struct m *p,*t = new m;

if (t == NULL)

return 0;

t->no = no;

t->num = num;

t->next = NULL;

if (head == NULL)

{

head = t;

return 1;

}

p = head;

while (p->next != NULL)

p = p->next;

p->next = t;

return 1;

}

int del (void)

struct m *p = head;

struct m *t = head;

while (p!= NULL)

{

if (!(p->no % 2))

{

t->next = p->next;

free (p);

p = t;

}

t = p;

p = p->next;

}

}

int pri (void)

{

struct m *p = head;

while (p != NULL)

{

printf ("%d",p->num);

if (p->next != NULL)

printf (" ");

else

printf ("\n");

p = p->next;

}

return 0;

}

int main()

{

int n,i = 1;

while (scanf ("%d",&n),n != -1)

add(n,i++);

del();

pri ();

system ("PAUSE");

return 0;

}

实验二 链表操作实现

实验二链表操作实现 实验日期: 2017 年 3 月 16 日 实验目的及要求 1. 熟练掌握线性表的基本操作在链式存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的链式存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 实验容 已知程序文件linklist.cpp已给出学生身高信息链表的类型定义和基本运算函数定义。 (1)链表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct node{ datatype data; /*数据域*/ struct node *next; /*指针域*/ } LinkNode, *LinkList; (2)带头结点的单链表的基本运算函数原型 LinkList initList();/*置一个空表(带头结点)*/ void createList_1(LinkList head);/*创建单链表*/ void createList_2(LinkList head);/* 创建单链表*/ void sort_xh(LinkList head);/*单链表排序*/ void reverse(LinkList head);/*对单链表进行结点倒置*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(LinkList head);/*打印单链表*/ void save(LinkList head,char strname[]);/*保存单链表到文件*/

数据结构第三次实验+第二题链表排序

数据结构实验报告 实验名称:实验三——排序 学生姓名:XXX 班级:xxxxxxxxxxx 班内序号: 学号: 日期:2018年6月3日 1.实验要求 实验目的:通过选择下面两个题目之一,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。 实验内容:使用链表实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、冒泡排序 3、快速排序 4、简单选择排序 5、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其 中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒 (选作) 4、对2和3的结果进行分析,验证上述各种算法的时间复杂度 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构

单链表,储存每个元素值同时,储存该元素的直接后继元素位置信息。即数据域(data),指针域(next)。struct Node { int data; struct Node *next; }; 2.2 关键算法分析 链表的建立: Linklist::Linklist (int a[],int n) { front = new Node; Node *r = front ; for(int i=0;idata = a[i]; r->next = s; r=s; } r->next = NULL; } 尾插法创建链表:①堆中建立新节点②将a[i]写入新节点data域③新节点加入链表r->next=s. ④修改尾指针r=s. 简单选择排序: void Linklist ::Link_Selectsort (int n) { Node *p=front->next ; int a=0,b=0; //a记载比较次数,b记载移动次数 while(p!=NULL) { Node *s =p; //s指向最小节点 Node *q=p->next ; while(q!=NULL)

Excel模拟运算表(HTML)

Excel模拟运算表 ——家庭理财的好帮手随着经济的发展,家庭对高档耐用消费品的需求逐渐上涨,”贷款消费”正改变着人们”量入为出”的传统消费理念,越来越成为家庭高档消费品,如住房,汽车等的主要支付手段。筹集资金正逐渐成为一个家庭的基本财务活动,而长期借款正逐步成为一个家庭资产负债表的长设项目。 对于长期借款筹资,所关心的主要两个因素是利息和期限。因为,利息是长期借款的主要成本,期限影响着家庭的到期还款压力。而这两个因素又与长期借款的其他因素如贷款金额,利率,偿付方式等相互影响。对住房贷款的家庭而言,无论是公基金贷款还是商业贷款,利率均无大的选择余地,因此,贷多少款,贷多少年是其主要考虑的问题。在手工情况下,要解决这一问题,计算复杂,耗时多。而Excel模拟运算表则提供了一个很好的解决问题的工具。Excel模拟运算表工具是一种只需一步操作就能计算出所有变化的模拟分析工具。它可以显示公式中某些值的变化对计算结果的影响,为同时求解某一运算中所有可能的变化值组合提供了捷径。并且,模拟运算表还可以将所有不同的计算结果同时显示在工作表中,便于查看和比较。下面举个例子加以说明。 如某人买房,需资金90万,一部分由银行贷款取得,年利率假设为4%,采取每月等额还款的方式,贷款数额是80万,70万,60万,50万,40万还是30万还款期限是10年,15年,20年,25年还是30年利用Excel模拟运算表的具体步骤如下: 1.使用[文件/新建]或[新建]工具,建立一新工作簿,并选择一张工作表,将住房贷款有关的基本数据输入该工作表,如图1(B2:D6)单元格区域所示。 图1 住房贷款还款的Excel模拟运算表分析图 2.计算总付款期数。总付款期数是借款年限与每年付款期数的乘积(=借款年限×每年付款期数),在选择D7单元后,输入公式:=F5*F6即可。 3.计算每期偿还金额。每期偿还金额属于年金问题,因此,计算每期偿还金额可使用PMT()函数。选择D8单元后,输入公式:=PMT($D$4/$D$6,$D$7,$D$3)即可, 4.列示住房贷款”贷款金额”和”总付款期数”各种可能的数据,如图1(A14:A19),(B13:F13)单元格区域所示,并在行与列交叉的A13单元格中输入目标函数PMT(),即在该单元格中输入公式:=PMT($D$4/$D$6,$D$7,$D$3)。 5.选择目标单元区域(A13:F19),使用[数据/模拟运算表]命令,出现如图2所示的对话框。 在其对话框的[输入引用行的单元格]中输入$D$7,[输入引用列的单元格]中输入$D$3,再单击[确定]按钮,各分析值自动填入双因素分析表中,如图1(B14:F19)单元格区域所示。 图2 模拟运算表工具使用示意图 由于在工作表中,每期偿还金额与借款金额(单元格D3),借款年利率(单元格D4),借款年限(单元格D5),每年偿还期数(单元格D6)以及各因素可能组合(单元格区域A14:A19和B13:F13)这些基本数据之间建立了动态链接,因此,财务人员可通过改变单元格D3,单元格D4,单元格D5或单元格D6中的数据,或调整单元格区域A14:A19和B13:F13中的各因素可能组合,各分析值将会自动计算,不用再重复上述步骤。人们可以一目了然地观察到不同期限,不同借款金额下,每期应偿还金额的变化,从而可以根据自己的收入情况,选择一种当前家庭力所能及的房屋贷款方案。

链表排序算法总结

这个星期做数据结构课设,涉及到两个基于链表的排序算法,分别是基于链表的选择排序算法和归并排序算法。写出来跟大家一起分享一下,希望对数据结构初学朋友有所帮助,高手就直接忽视它吧。话不多说,下面就看代码吧。 [c-sharp]view plaincopy 1.node *sorted(node *sub_root) 2.{ 3.if (sub_root->next) 4. { 5. node * second_half = NULL; 6. node * first_half = sub_root; 7. node * temp = sub_root->next->next; 8.while (temp) 9. { 10. first_half = first_half->next; 11. temp = temp->next; 12.if(temp) 13. temp = temp->next; 14. } 15. second_half = first_half->next; 16. first_half->next = NULL; 17. node * lChild = sorted(sub_root); 18. node * rChild = sorted(second_half); 19.if (lChild->data < rChild->data) 20. { 21. sub_root = temp = lChild; 22. lChild = lChild->next; 23. } 24.else 25. { 26. sub_root = temp = rChild; 27. rChild = rChild->next; 28. } 29.while (lChild&&rChild) 30. { 31.if (lChild->data < rChild->data ) 32. { 33. temp->next = lChild; 34. temp = temp->next; 35. lChild = lChild->next; 36. } 37.else 38. {

最新C语言链表排序

========================== 功能:选择排序(由小到大) 返回:指向链表表头的指针 ========================== */ /* 选择排序的基本思想就是反复从还未排好序的那些节点中, 选出键值(就是用它排序的字段,我们取学号num为键值)最小的节点, 依次重新组合成一个链表。 我认为写链表这类程序,关键是理解: head存储的是第一个节点的地址,head->next存储的是第二个节点的地址; 任意一个节点p的地址,只能通过它前一个节点的next来求得。 单向链表的选择排序图示: ---->[1]---->[3]---->[2]...---->[n]---->[NULL](原链表) head 1->next 3->next 2->next n->next ---->[NULL](空链表) first tail ---->[1]---->[2]---->[3]...---->[n]---->[NULL](排序后链表) first 1->next 2->next 3->next tail->next 图10:有N个节点的链表选择排序 1、先在原链表中找最小的,找到一个后就把它放到另一个空的链表中; 2、空链表中安放第一个进来的节点,产生一个有序链表,并且让它在原链表中分离出来(此时要注意原链表中出来的是第一个节点还是中间其它节点);

3、继续在原链表中找下一个最小的,找到后把它放入有序链表的尾指针的next,然后它变成其尾指针; */ struct student *SelectSort(struct student *head) { struct student *first; /*排列后有序链的表头指针*/ struct student *tail; /*排列后有序链的表尾指针*/ struct student *p_min; /*保留键值更小的节点的前驱节点的指针*/ struct student *min; /*存储最小节点*/ struct student *p; /*当前比较的节点*/ first = NULL; while (head != NULL) /*在链表中找键值最小的节点。*/ { /*注意:这里for语句就是体现选择排序思想的地方*/ for (p=head,min=head; p->next!=NULL; p=p->next) /*循环遍历链表中的节点,找出此时最小的节点。*/ { if (p->next->num < min->num) /*找到一个比当前min小的节点。*/ { p_min = p; /*保存找到节点的前驱节点:显然p->next的前驱节点是p。*/ min = p->next; /*保存键值更小的节点。*/ } }

Excel模拟分析:模拟运算表

Excel模拟分析:模拟运算表 【教学目标】 1、知识目标:①了解Excel的模拟运算表 ②掌握Excel的模拟运算表 ③掌握FV函数 ④掌握PMT函数 2、技能目标:①学会Excel的模拟运算表 ②学会使用FV函数 ③学会使用PMT函数 3、情感目标:①培养学生认真思考,积极操作,协同合作的能力; ②培养学生探究性学习的能力。 【教学重点】 Excel的模拟运算表 【教学难点】 Excel的FV函数和PMT函数 【教学方法】 1、教法:实验演示、任务驱动 2、学法:上机操作、小组协作讨论、观看教学视频 【教学手段】采用课件演示,投影演示,多媒体电子教室同步演示等现代化教学手段。【教学过程】 平时大家都知道,现金不要带太多在身在,有钱存银行。假如您现在出去工作了,每个月都有一笔固定的收入,为了方便,将部分工资存入银行,存了一段时间,银行存款有多少呢?存款和利息与时间有很大关系,Excel模拟分析则提供了一个很好的解决问题的工具。 一、什么是模拟分析? 模拟运算表是一组命令的组成部分,这些命令也被称作模拟分析工具。使用模拟运算表即意味着执行模拟分析。 模拟分析是指通过更改单元格中的值来查看这些更改对工作表中公式结果的影响的过程。例如,可以使用模拟运算表更改贷款利率和期限以确定可能的月还款额。 【下载】下载练习文件:https://www.wendangku.net/doc/4e8680596.html,/file/be6zaqea 任务一:单变量模拟运算表 单变量模拟运算表是指excel在模拟运算中,发生变化的只有一个变量。这个变量的数值可以写在同一列,也可以写在同一行中。

单变量模拟运算表的结构特点是,其输入数值被排列在一列中(列引用)或一行中(行引用)。单变量模拟运算表中使用的公式必须引用输入单元格。 【演示】 视频演示地址:https://www.wendangku.net/doc/4e8680596.html,/file/dpdhixqb 【学生实践】上机实操,优生带差生,教师巡回指导。 任务二:双变量模拟运算表 双变量模拟运算表中的两组输入数值使用同一个公式。这个公式必须引用两个不同的输入单元格。 视频演示地址:https://www.wendangku.net/doc/4e8680596.html,/file/be6dw8rp 【学生实践】上机实操,优生带差生,教师巡回指导。

实验三四 链表的实现和应用

江南大学物联网工程学院上机报告
课程名称 班 级 数据结构 上机名称 姓 名 链表的实现和应 用 上机日期 学 号 2016.3.11 上机报告要求 1.上机名称 2.上机要求 3.上机环境 4.程序清单(写明运行结果) 5.上机体会
1.上机名称
链表的实现和应用
2.上机要求
⑴定义线性表的链式存储表示; ⑵基于所设计的存储结构实现线性表的基本操作; ⑶编写一个主程序对所实现的线性表进行测试; ⑷线性表的应用:①设线性表 L1和 L2分别代表集合 A 和 B,试设计算法求 A 和 B 的并集 C,并用线 性表 L3代表集合 C;②设线性表 L1和 L2中的数据元素为整数,且均已按值非递减有序排列,试 设计算法对 L1和 L2进行合并,用线性表 L3保存合并结果,要求 L3中的数据元素也按值非递减 有序排列。 ⑸设计一个一元多项式计算器,要求能够:①输入并建立多项式;②输出多项式;③执行两个多项式 相加;④执行两个多项式相减;⑤(选做)执行两个多项式相乘。
3.上机环境
Visual C++ 6.0
4.程序清单(写明运行结果)
(1) #include #include typedef int datatype; typedef struct node { datatype data; struct node *next; }LinkList; LinkList *CREATLISTF(LinkList *L,int n) { intnum,i; LinkList *head,*s,*r; head=L; r=head; head->next=NULL;

顺序链表

#include #include #define initsize 100 #define increa 10 int length=0;/*包含标记符号-1,实际元素长度要减去一*/ int size=0;/*存储空间大小*/ int *initlist() { int *head; head=(int*)malloc(initsize*sizeof(int)); if(head==NULL) { printf("malloc error"); exit(0); } length=0; size=100;

// printf("when you initlist,you should typein your element as follow\n,so you'd better chose '2'!!!!\n"); printf("***********************************************\n"); return head; } void typeelem(int *p) { int n; int *head; head=p; printf("type in you elem \nps.add -1 as an end to have a stop\n输入正整数数据,以-1作为结尾标志,-1不算入链表元素\n"); if(length>=size) { p=(int*)realloc(p,initsize*sizeof(int)); size+=increa; } scanf("%d",&n); length++; while(n!=-1) { if(length>=size) { p=(int*)realloc(p,initsize*sizeof(int)); size+=increa; } *head=n; head++; length++; scanf("%d",&n); } printf("***********************************************\n"); } void printlist(int *head) { int *p; int i; p=head;

实验二集成运算放大器的应用模拟运算 (1)

实验七 集成运算放大器的应用(一) 模拟运算电路 预习部分 一、实验目的 1. 研究由集成运算放大器组成的比例、加法、减法和积分等基本运算电路的功能。 2. 掌握运算放大器的使用方法,了解其在实际应用时应考虑的一些问题。 二、实验原理 集成运算放大器是一种具有高电压放大倍数的直接耦合多级放大电路。本实验采用的集成运放型号为μA741,引脚排列如图2-7-1所示。它是八脚双列直插式组件,②脚和③脚为反相和同相输入端,⑥脚为输出端,⑦脚和④脚为正,负电源端,①脚和⑤脚为失调调零端,①⑤脚之间可接入一只几十K Ω的电位器并将滑动触头接到负电源端。 ⑧脚为空脚。 当外部接入不同的线性或非线性元器件组成输入和负反馈电路时,可以灵活地实现各种特定的函数关系。在线性应用方面,可组成比例、加法、减法、积分、微分、对数等模拟运算电路。 1) 反相比例运算电路 电路如图2-7-2所示。对于理想运放, 该电路 的输出电压与输入电压之间的关系为 Uo =-(R F / R 1)Ui 为了减小输入级偏置电流引起的运算误差,在 同相输入端应接入平衡电阻 R 2=R 1‖R F 。 2) 反相加法电路 图2-7-2 反相比例运算电路 图2-7-3反相加法运算电路 电路如图2-7-3所示,输出电压与输入电压之间的关系为 F i F i F O //R //R R R U R R U R R U 2132211 =??? ? ??+-= 图2-7-1 μA741管脚图

3) 同相比例运算电路 图2-7-4(a)是同相比例运算电路,它的输出电压与输入电压之间的关系为 Uo =(1+R F / R 1)Ui R 2=R 1 // R F 当R 1→∞时,Uo =Ui ,即得到如图2-7-4(b)所示的电压跟随器。图中R 2=R F ,用以减小漂移和起保护作用。一般R F 取10K Ω,R F 太小起不到保护作用,太大则影响跟随性。 (a) 同相比例运算电路 (b) 电压跟随器 图2-7-4 同相比例运算电路 4) 差动放大电路(减法器) 对于图2-7-5所示的减法运算电路,当R 1=R 2,R 3=R F 时, 有如下关系式 图2-7-5 减法运算电路 图2-7-6 积分运算电路 5) 积分运算电路 反相积分电路如图2-7-6所示。在理想化条件下,输出电压uo 等于 ()()01 C t i O U dt U RC t U +-=? 式中 Uc(o)是t =0时刻电容C 两端的电压值,即初始值。 如果u i (t)是幅值为E 的阶跃电压,并设Uc(o)=0,则 ()RC E Edt RC t U t O -=-=?01 即输出电压 Uo(t)随时间增长而线性下降。显然R C 的数值越大,达到给定的Uo 值所需的时间就越长。积分输出电压所能达到的最大值受集成运放最大输出范围的限值。 ()121 i i F O U U R R U -=

单链表的基本操作 C语言课程设计

课程设计(论文) 题目名称单链表的基本操作 课程名称C语言程序课程设计 学生姓名 学号 系、专业信息工程系、网络工程专业 指导教师成娅辉 2013年6月6 日

目录 1 前言 (3) 2 需求分析 (3) 2.1 课程设计目的 (3) 2.2 课程设计任务 (3) 2.3 设计环境 (3) 2.4 开发语言 (3) 3 分析和设计 (3) 3.1 模块设计 (3) 3.2 系统流程图 (4) 3.3 主要模块的流程图 (6) 4 具体代码实现 (9) 5 课程设计总结 (12) 5.1 程序运行结果 (12) 5.2 课程设计体会 (12) 参考文献 (13) 致谢 (13)

1 前言 我们这学期学习了开关语句,循环语句、链表、函数体、指针等的应用,我们在完成课程设计任务时就主要用到这些知识点,本课题是单链表的简单操作,定义四个子函数分别用来创建链表、输出链表、插入数据以及删除数据,主函数中主要用到开关语句来进行选择调用哪个子函数,下面就是课程设计的主要内容。 2 需求分析 2.1 课程设计目的 学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。 2.2 课程设计任务 输入一组正整数,以-1标志结束,用函数实现:(1)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;(2)往该链表中插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;(3)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。 2.3 设计环境 (1)WINDOWS 7系统 (2)Visual C++ 2.4 开发语言 C语言 3 分析和设计 3.1 模块设计 定义链表结点类型struct node表示结点中的信息,信息包括数据域data(用于存放结点中的有用数据)以及指针域next(用于存放下一个结点的地址),并将链表结点类型名改为NODE。如下所示:

《数据结构与算法分析》课程设计:顺序表、单链表、顺序栈、查找、排序算法

*******大学 《数据结构与算法分析》课程设计 题目:数据结构上机试题 学生姓名: 学号: 专业:信息管理与信息系统 班级: 指导教师: 2014年04月

目录 一、顺序表的操作 (2) 【插入操作原理】 (2) 【删除操作原理】 (2) 【NO.1代码】 (3) 【运行截图演示】 (7) 二、单链表的操作 (10) 【创建操作原理】 (10) 【插入操作原理】 (10) 【删除操作原理】 (10) 【NO.2代码】 (11) 【运行截图演示】 (20) 三、顺序栈的操作 (25) 【数值转换原理】 (25) 【NO.3代码】 (26) 【运行截图演示】 (30) 四、查找算法 (32) 【顺序查找原理】 (32) 【折半查找原理】 (32) 【NO.4代码】 (33) 【运行截图演示】 (38) 五、排序算法 (40) 【直接插入排序原理】 (40) 【快速排序原理】 (40) 【NO.5代码】 (41) 【运行截图演示】 (46)

一、顺序表的操作 (1)插入元素操作:将新元素x 插入到顺序表a 中第i 个位置; (2)删除元素操作:删除顺序表a 中第i 个元素。 【插入操作原理】 线性表的插入操作是指在线性表的第i-1个数据元素和第i 个数据元素之间插入一个新的数据元素,就是要是长度为n 的线性表: ()11,,,,,i i n a a a a -………… 变成长度为n+1的线性表: ()11,,,,,,i i n a a b a a -………… 数据元素1i a -和i a 之间的逻辑关系发生了变化。 (其【插入原理】在课本P23的算法2.3有解释) 【删除操作原理】 反之,线性表的删除操作是使长度为n 的线性表: ()111,,,,,,i i i n a a a a a -+………… 变成长度为n-1的线性表: ()111,,,,,i i n a a a a -+………… 数据元素1i a -、i a 和1i a +之间的逻辑关系发生变化,为了在存储结构上放映这个变化,同样需要移动元素。 (其【删除原理】在课本P24的算法2.4有解释)

单链表的建立及其基本操作的实现(完整程序)

#include "stdio.h"/*单链表方式的实现*/ #include "malloc.h" typedef char ElemType ; typedef struct LNode/*定义链表结点类型*/ { ElemType data ; struct LNode *next; }LNode,*LinkList;/*注意与前面定义方式的异同*/ /*建立链表,输入元素,头插法建立带头结点的单链表(逆序),输入0结束*/ LinkList CreateList_L(LinkList head) { ElemType temp; LinkList p; printf("请输入结点值(输入0结束)"); fflush(stdin); scanf("%c",&temp); while(temp!='0') { if(('A'<=temp&&temp<='Z')||('a'<=temp&&temp<='z')) { p=(LinkList)malloc(sizeof(LNode));/*生成新的结点*/ p->data=temp; p->next=head->next; head->next=p;/*在链表头部插入结点,即头插法*/ } printf("请输入结点值(输入0结束):"); fflush(stdin); scanf("%c",&temp); } return head; } /*顺序输出链表的内容*/ void ListPint_L(LinkList head) { LinkList p; int i=0; p=head->next; while(p!=NULL) { i++; printf("单链表第%d个元素是:",i);

链表的基本操作-数据结构实验报告

大学数据结构实验报告 课程名称数据结构实验第(四)次实验实验名称链表的基本操作 学生姓名于歌专业班级学号 实验成绩指导老师(签名)日期2018年10月01日 一、实验目的 1. 学会定义单链表的结点类型,实现对单链表的一些基本操作和具体 的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。 2. 掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。 二、实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对单链表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容: 1.编写程序完成单链表的下列基本操作: (1)初始化单链表La (2)在La中插入一个新结点 (3)删除La中的某一个结点 (4)在La中查找某结点并返回其位置 (5)打印输出La中的结点元素值 (6)清空链表 (7)销毁链表 2 .构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、 Lb合并成一个有序单链表Lc。 四、思考与提高: 1.如果上面实验内容2中合并的表内不允许有重复的数据该如何操作? 2.如何将一个带头结点的单链表La分解成两个同样结构的单链表Lb,Lc,使得Lb中只含La表中奇数结点,Lc中含有La表的偶数结点?五、实验设计 1.编写程序完成单链表的下列基本操作: (1)初始化单链表La LinkList InitList() {

int i,value,n; LinkList H=(LinkList)malloc(sizeof(LNode)); LinkList P=H; P->next=NULL; do{ printf("请输入链表的长度:"); scanf("%d",&n); if(n<=0) printf("输入有误请重新输入!\n"); }while(n<=0); printf("请输入各个元素:\n"); for(i=0; idata=value; P->next=NEW; NEW->next=NULL; P=NEW; } printf("链表建立成功!\n"); return H->next; } (2)在La中插入一个新结点 LinkList InsertList(LinkList L,int i,ElemType value) { LinkList h,q,t=NewLNode(t,value); int x=0; h=q=L; if(i==1) t->next=h, h=t; else { while(x++next; t->next=q->next; q->next=t; } printf("插入成功!\n"); return h; } (3)删除La中的某一个结点

Excel模拟运算表教程

Excel模拟运算表教程 模拟运算表和方案管理器是一般初学者不太常用的功能。我们一般可以称之为假设分析。那么所谓的假设分析到底是什么含义呢?我们可以这样认为假设分析就是说当某一个或几个变量变动时候值会产生怎么样的变动。 理论分析,希望你可以耐心的看完这些。 通过假设分析你可以做到什么?假设分析是求解变量的变动对结果的影响。我们可以给变量赋若干个值,那么结果也会相应的出现相应的变化。我们当然可以把变量的值一次又一次的代入进行计算,但是更方便的方法就是用模拟运算表。当然模拟运算表也有它的局限性。它可以容纳的变量最多是2个。对于模拟运算表我们可以用y=f(x)或者是y=f(a,b)来表示。其中x,a,b都是变量,f表示的是最终的值和变量直接的关系。看一个最简单的例子。 这里我们把a1可以看做是变量x,y=11也就是最终运算的结果,而那个f也就是值和变量的关系,这个关系就是a1+10。(其实我们看待excel公式的时候,都应当理解为它表示的是一个关系。这里就是Y=x+10)。简化的写就是y=f(a1).f表示的是变量和值之间的一个关系。这个关系可能就是一般的数学运算,也可能是其他我们还不了解的关系,但是不管怎么样,我们知道结果和变量之间是存在有这样的关系就行了。在应用的时候我们要知道那些是变量,那些是结果。结果总是通过关系f得出的。这里好像很像我们初中学习函数的感觉。回到以前的时光了。 进入正题,我们现在所需要的就是动用我们的鼠标把这个关系告诉excel变量在什么地方,在什么地方引用关系就行了,余下来的事情就归excel做。 一、如果是一个变量y=f(x) 假设其他费用占毛利润的45%,净利润等于毛利润减去其他费用。很显然在这个里面毛利润就是那个变量x。现在提出的问题就是如果毛利润不是20000,而是20000,30000,40000,50000等等等等,净利润会有什么样的变化呢?这个时候就要请出模拟运算表了。

链表基本操作实验报告

实验2 链表基本操作实验 一、实验目的 1. 定义单链表的结点类型。 2. 熟悉对单链表的一些基本操作和具体的函数定义。 3. 通过单链表的定义掌握线性表的链式存储结构的特点。 二、实验内容与要求 该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。 要求: 同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。 三、 算法分析与设计。 头结点 ......

2.单链表插入 s->data=x; s->next=p->next; p->next=s; 3.单链表的删除: p->next=p->next->next;

四、运行结果 1.单链表初始化 2.创建单链表 3.求链表长度 4.检查链表是否为空 5.遍历链表 6.从链表中查找元素 7.从链表中查找与给定元素值相同的元素在顺序表中的位置

8.向链表中插入元素 插入元素之后的链表 9.从链表中删除元素 删除位置为6的元素(是3) 10.清空单链表 五、实验体会 经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程序做了仔细的分析,对单链表创建、插入、删除算法画了详细的N-S流程图。

c++单向链表的排序

河北联合大学 2011-2012 第 2 学期
《 软 件 设 计 基 础 -C++》
课程设计报告
设计名称:设计一个处理单向链表的程序:链表的排序 姓 名:王学增 学 号:201005100206
专业班级:土木工程 1 班 学 院:建筑工程学院
设计时间:2012-5-31 设计地点:机房
指导教师评语: 教师评定: 自评成绩;75
指导教师签字:
年 年 月 月 日 日

《软件设计基础-C++》课程设计报告

2
页,共
16 页


1.课程设计目的···································· ···································· ···································· 2.课程设计任务与要求 ································ ································ ······························· 3.课程设计说明书··································· ··································· ·································· 4.课程设计成果···································· ···································· ···································· 5.程序调试过程···································· ···································· ···································· 6.设计问题的不足和改进方案 ···························· ···························· ··························· 7.课程设计心得···································· ···································· ···································· 8.参考文献······································· ······································· ······································

链表基本操作实验报告

实验2 链表基本操作实验 一、实验目的 1.定义单链表的结点类型。 2.熟悉对单链表的一些基本操作和具体的函数定义。 3.通过单链表的定义掌握线性表的链式存储结构的特点。 二、实验内容与要求 该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。 要求: 同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。 三、算法分析与设计。 1.创建单链表: 头结点L

...... 2.单链表插入

s s->data=x; s->next=p->next; p->next=s; 3.单链表的删除: p->next=p->next->next;

四、运行结果 1.单链表初始化 2.创建单链表 3.求链表长度 4.检查链表是否为空 5.遍历链表 6.从链表中查找元素 7.从链表中查找与给定元素值相同的元素在顺序表中的位置

8.向链表中插入元素 插入元素之后的链表 9.从链表中删除元素 删除位置为6的元素(是3) 10.清空单链表 五、实验体会 经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程

Excel 模拟运算表使用方法

Excel 模拟运算表使用方法 大家平常都只用函数公式做运算,相信很少人用过模拟运算.现对模拟运做一实例分析,让大家对之有初步认识. 在工作表中输入公式后,可进行假设分析.查看当改变公式中的某些值时怎样影响其结果,模拟运算表提供了一个操作所有变化的捷径。 模拟运算表是一个单元格区域,它可显示一个或多个公式中替换不同值时的结果。有两种类型的模拟运算表:单输入模拟运算表和双输入模拟运算表。单输入模拟运算表中,用户可以对一个变量键入不同的值从而查看它对一个或多个公式的影响。双输入模拟运算表中,用户对两个变量输入不同值,而查看它对一个公式的影响。 1 单输入模拟运算表 当对公式中的一个变量以不同值替换时,这一过程将生成一个显示其结果的数据表格。我们既可使用面向列的模拟运算表,也可使用面向行的模拟运算表。 面向列的模拟运算表 例如我们对图中的模型进行模拟运算,假设可变成本分别为固定成本的10%、15%、20%、25%和30%,而其他条件不改变时整个公司的利润会怎样变动? 其操作步骤如下: (1)在单一列的输入单元格内,输入要Excel替换的值的序列,我们在“A6”单元格中向下输入上述的序列。在第一个值的上面一行和值列右边的单元格中,键入引用输入单元格的公式,输入单元格可以是工作表上的任一空单元格,我们指定“A5”单元格为输入单元格。输入附加的公式到同一行中第一个公式的右边,即输入“=A2+A3-B2*A5-B2”。如图所示。

(2)选定包含公式和替换值序列的矩形区域,如图所示。 (3)执行“数据”菜单中“模拟运算表”命令,出现如图对话框。 (4)在“输入引用列的单元格”框中,输入可变单元格地址,在这里我们输入“A5”单元格。按下“确定”按钮。之后,Excel就会替换输入单元格中的所有值,且把结果显示在每一个输入值的右侧,如图所示。还可以提供新值来替换工作表上原来输入的值,这样Excel将使用新值重新进行计算。使用基于行的模拟运算表的过程和列类似,大家可以自己练习一下

链表基本操作实验报告记录

链表基本操作实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

实验2链表基本操作实验 一、实验目的 1.定义单链表的结点类型。 2.熟悉对单链表的一些基本操作和具体的函数定义。 3.通过单链表的定义掌握线性表的链式存储结构的特点。 二、实验内容与要求 该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。 要求: 同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。 三、算法分析与设计。 1.创建单链表: LinkedList LinkedListCreat( ) 创建链表函数 LinkedList L=LinkedListInit(),p, r; 调用初始化链表函数 r=L; r指向头结点 使用malloc函数动态分配存储空间,指针p指向新开辟的结点,并将元素存 放到新开辟结点的数据域, p=(LinkedList)malloc(sizeof(LNode)); p->data=x; r->next=p; 将新的结点链接到头结点r之后 r=p; r指向p结点 scanf("%d",&x); 满足条件循环输入链表元素 while(x!=flag) 当输入不为-1时循环 r->next=NULL; return L; 将链表结尾赋空值,返回头结点L 头结点L L ...... ^ ^ An A1 A2

相关文档