文档库 最新最全的文档下载
当前位置:文档库 › 双向循环链表的创建及相关操作的实现课程说明

双向循环链表的创建及相关操作的实现课程说明

双向循环链表的创建及相关操作的实现课程说明
双向循环链表的创建及相关操作的实现课程说明

双向循环链表的创建及相关操作的实现课程说明

山东建筑大学计算机科学与技术学院

课程设计说明书

题目:双向链表的创建和操作的实现

树的创建及相关操作的实现课程:数据结构与算法

院(部):计算机学院

专业:网络工程

班级:网络101

学生姓名:王天未

学号:2010111200

指导教师:伊静

完成日期:2013-7-6

目录

课程设计任务书1 .......................................... III 课程设计任务书2 ........................................... IV 双向循环链表的创建及相关操作的实现.. (6)

一、问题描述 (6)

二、数据结构 (6)

三、逻辑设计 (7)

四、编码 (8)

五、测试数据 (13)

六、测试情况 (13)

树的创建及相关操作的实现 (17)

一、问题描述 (17)

二、数据结构 (17)

三、逻辑设计 (18)

四、编码 (21)

五、测试数据 (28)

六、测试情况 (28)

结论 (30)

参考文献 (31)

课程设计指导教师评语 (32)

山东建筑大学计算机科学与技术学院课程设计任务书1

指导教师(签字):教研室主任(签字)

山东建筑大学计算机科学与技术学院

课程设计任务书2

指导教师(签字):教研室主任(签字)

双向循环链表的创建及相关操作的实现一、问题描述

1、每个节点的next域构成了一个循环单链表

2、每个节点的prev域构成了另一个循环单链表

二、数据结构

针对所处理的树:

1、画出双向循环链表的存储结构

2、使用所选用语言的功能,描述该存储结构的实现

private static class Node {

AnyType data;

Node prev;

Node next;

}

三、逻辑设计

1、总体思路

对于双向循环链表,建立一个空表,然后实现双向循环链表的插入,删除操作。

为了便于逆置的操作,选择建立一个带头节点的双向循环链表,插入第一个节点和插入最后一个节点,只需要在0号位置和size()

位置插入节点就行。

2、模块划分(以图示的方法给出各个函数的调用关系)

3、函数或类的具体定义和功能

class Node//节点类定义

public class DlList < AnyType>//循环链表主类

public boolean add(int idex, AnyType x)//链表插入操作

public AnyType remove(int idex )//链表删除操作

private void inverse()//链表逆置

四、编码

import java.util.Scanner;

class Node{

public AnyType data;

public Node prev;

public Node next;

public Node(){

data=null;

prev=null;

next=null;

}

public Node(AnyType d){

data=d;

prev=null;

next=null;

}

public Node(AnyType d,Node p,Node n){ data=d;

prev=p;

next=n;

}

}//节点类

public class DlList < AnyType>{

private Node headNode=new Node(); //头标记或头节点

private int theSize;//长度

public DlList(){

headNode.next=headNode;

headNode.prev=headNode;

theSize=0;

}//创建一个空表

public int size(){

return theSize;

}//设定表的长度

public boolean add(AnyType x) {

add(theSize, x);

return true;

}//链表输入操作

public boolean add(int idex, AnyType x) {

boolean flag;

if (idex < 0 || idex > theSize) {//判断插入的位置是否大于0 System.out.println("您输入的要插入元素的位置不正确!");

flag = false;

} else{

flag = true;

}

if (flag) {

Node p;

p = getNode(idex);

addBefore(p, x);

}//插入操作

return flag;

}

private void addBefore(Node p, AnyType x) { Node newNode = new Node(x, p.prev, p);

newNode.prev.next = newNode;

p.prev = newNode;

theSize++;

}//插入方法

public AnyType remove(int idex ) {

return remove(getNode(idex));

}

private AnyType remove( Node p ){

p.prev.next=p.next;

p.next.prev=p.prev;

theSize--;

return p.data;

}//删除操作

private void inverse(){

Node p,q,l;

p=headNode.next;

q=p.next;

while(p!=headNode){

l=q.next;//空置的中转结点赋值

q.next=p;//将p、q链表的前后域置换。q由p的后域变成前域

p.prev=q;

p=q;//置换后,将各个结点置换输出。

q=l;

}

q.next=p;

p.prev=q;//当p为头结点时,直接将前后域置换。

}//逆置

private Node getNode(int idex){

Node p;

if(idex<0||idex>size())

throw new IndexOutOfBoundsException("getNode idex:"+idex+";size:"+size());

if(idex

{

p=headNode;

for(int i=0;i<=idex;i++)

p=p.next;

}

else{

p=headNode;

for(int i=size();i>idex;i--){

p=p.prev;

}

}

return p;

}//查找结点位置

public void print(){

for(int i=0;i

System.out.print(getNode(i).data+" ");

System.out.println();

}//结果输出

public void choose(){

System.out.println("1.插入第i个节点");

System.out.println("2.删除第i个节点");

System.out.println("3.插入第一个节点");

System.out.println("4.插入最后一个节点");

System.out.println("5.逆置");

}//选择操作项

public static void main(String[] args){

DlList dl=new DlList();

Scanner sc=new Scanner(System.in);

int xuanze;

System.out.println("请输入链表的元素的个数(大于0个):");

int n=sc.nextInt();

System.out.println("请输入链表的"+n+"个元素:");

for(int i=1;i<=n;i++){

int l=sc.nextInt();

dl.add(l);//链表元素输入

}

System.out.println("您输入的链表为:");

dl.print();//调用print方法,提示操作。

System.out.println("请选择操作项:");

dl.choose();//调用choose,选择操作。

while(true){

xuanze=sc.nextInt();

switch(xuanze){

case 1:

System.out.println("请输入要插入的位置下标和数据:");

int idex=sc.nextInt();

int data=sc.nextInt();

dl.add(idex, data);

dl.print();

break;

case 2:

System.out.println("请输入要删除节点的下标:");

int idex1=sc.nextInt();

dl.remove(idex1);

dl.print();

break;

case 3:

System.out.println("请输入插入第一个节点的元素:");

int data1=sc.nextInt();

dl.add(0,data1);

dl.print();

break;

case 4:

System.out.println("请输入插入最后位置的元素:");

int data2=sc.nextInt();

dl.add(dl.size(), data2);

dl.print();

break;

case 5:

dl.inverse();

dl.print();

break;

default:

System.out.println("你的输入有误,请重新输入!");

break;

}

}

}

}

五、测试数据

1、对每个函数的测试数据

链表中的元素插入为1、2、3、4、5

插入第二个结点的元素为6

删除第二个节点的位置的元素6

插入第一个节点的元素为7

插入最后一个节点的元素为6

逆置链表

2、对程序整体的测试数据

输入元素为1、2、3、4、5的双向循环链表

六、测试情况

请输入链表的元素的个数(大于0个):

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

1 2 3 4 5

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

1

请输入要插入的位置下标和数据:2

6

1 2 6 3 4 5

请输入链表的元素的个数(大于0个):5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

1 2 3 4 5

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

2

请输入要删除的位置下标和数据:

2

6

1 2 3 4 5

请输入链表的元素的个数(大于0个):5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

1 2 3 4 5

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

3

请输入插入第一个节点的元素:

7

7 1 2 3 4 5

请输入链表的元素的个数(大于0个):5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

1 2 3 4 5

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

4

请输入插入最后位置的元素:

6

1 2 3 4 5 6

请输入链表的元素的个数(大于0个):5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

1 2 3 4 5

请选择操作项:

1.插入第i个节点

课程设计循环彩灯

课程设计说明书 课程名称:数字电子技术 设计题目:循环彩灯 院系:电子信息与电气工程学院 学生姓名:听风 学号:2010020200XX 专业班级:10级电子信息工程(1)班 指导教师: 2012 年5 月25日

课程设计任务书设计题目循环彩灯 学生姓名XX 所在院系电子信 息与电 气工程 学院 专业、年级、班 10级电子信息 工程(1)班 设计要求: 1、设计制作一个循环彩灯电路。 2、彩灯数量为8个,8个彩灯依次闪烁,彩灯亮灯时间为1秒。 3、器件:74LS192、74LS138、74LS00、555定时器各一片,48kΩ ,300 Ω,51kΩ,10uf,0.01uf各一个。 学生应完成的工作: 根据原理进行设计,方案论证,完成循环彩灯的原理图设计及PCB板的制作,手动布线完成PCB板图。然后将修改无误的PCB板图复制,转印,做板。再按照自己设计的电路原理图把电子元器件焊接到电路板上。经调试能正常工作,老师考查合格后,写好设计报告。 参考文献阅读: [1]童诗白.模拟电子技术基础[M].北京:高等教育出版社,2005. [2] 郑君里、杨为理信号与系统[M]北京:高等教育出版社,2011 [3] 谷树忠、刘文洲、姜航Altium Designer 教程北京:电子工业出版社,2006 [4]邱关源,罗先觉.电路(第五版)[M].北京:高等教育出版社,2006. [5]阎石.数字电子技术(第五版)[M].北京:高等教育出版社,2005. 工作计划: 2012年5月14日上午:课程设计说明、软件培训。下午:Multism电路仿真。 2012年5月15日:电路设计与仿真。 2012年5月16日上午:电路设计与仿真。下午:指导教师单独指导。 2012年5月17日:用Altium Designer 10设计原理图。 2012年5月18日:用Altium Designer 10设计PCB。 2012年5月21日上午:循环彩灯制版。下午:循环彩灯安装。 2012年5月22日:指导课程设计报告书写。 2012年5月23日:指导课程设计报告书写。 2012年5月24日:电路调试。 2012年5月25日:设计验收设计报告收交。 任务下达日期:2012 年 5 月14 日 任务完成日期:2012 年 5 月25 日 指导教师(签名):学生(签名):

双向循环链表的建立插入与删除

创建双向循环链表的源代码: #include #include #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int status; //双向循环链表的存储结构 typedef struct DuLNode { int data; int Length; struct DuLNode *prior; struct DuLNode *next; } DuLNode,*DuLinkList; //构建一个空的双向循环链表 void InitList(DuLNode **p) { *p=(DuLNode *)malloc(sizeof(DuLNode)); if(*p) { (*p)->next=(*p)->prior=*p; (*p)->Length=0; } else exit(OVERFLOW); } //双向循环链表的创建 void Create(DuLinkList &L,int n) { //输入n个元素的值,建立带头结点的双线循环链表L DuLinkList p=L,q; int i; for(i=1;i<=n;i++) { q=(DuLinkList)malloc(sizeof(DuLNode)); printf("您该输入第%d个元素的值了:",i); scanf("%d",&q->data); p->next =q; q->prior=p; q->next=L; L->prior =q; p=q;

L->Length ++; } } //结点的输出 void Display( DuLinkList L) { DuLinkList p; printf("双向循环链表中的结点的数据为:"); for(p=L->next ;p->next !=L;) { printf("%d",p->data); printf(" 、"); p=p->next ; } printf("%d\n",p->data ); } int main() { DuLinkList L; int n,i; InitList(&L) ; printf("你想创建几个循环节点就输入几就行啦,请输入:"); scanf("%d",&n); Create(L,n); Display(L); } 双向循环链表插入源代码: #include #include #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int status; //双向循环链表的存储结构 typedef struct DuLNode { int data; int Length; struct DuLNode *prior; struct DuLNode *next; } DuLNode,*DuLinkList; //构建一个空的双向循环链表

C语言_双向循环链表、增删查改、判断回文、排序、论文+代码

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法A设计实践 课程代码: 6015059 题目一: 线性表的链式表示和实现 题目二: 利用栈实现表达式求解 年级/专业/班: 2011/信科/2班 学生姓名: XXX 学号: XXX 开始时间:2014 年 5 月28 日 完成时间:2014 年 6 月28 日 课程设计成绩: 指导教师签名:年月日

目录 摘要 (1) 1 引言 (2) 2 实验一 (3) 2.1整体设计思路 (3) 2.2编码 (3) 2.3程序演示 (6)

摘要 随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,数据结构与算法的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。数据结构与算法旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。 本次数据结构实践的第一个实验是线性表的链式表示和实现,要求动态地建立循环链表并实现循环链元素的插入,删除,查询;使用双向链的结构实现判断一个录入的字符串是否是回文;建立一个单向链表,实现其内元素非递减排序。 关键词:数据结构与算法线性表链式结构栈表达式求解

1 引言 1.1问题的提出 数据结构课程设计是重要地实践性教学环节。在进行了程序设计语言课和《数据结构与算法》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。本课程设计是数据结构中的一个关于线性表链式表示的实现还有用栈实现表达式求解,此课程设计要求对栈存储结构和链表存储结构非常熟悉,并能熟练使用它们。 1.2C语言 C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。 1.3C语言发展过程 1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。 1.4任务 题目一:线性表的链式表示和实现 第一个实验主要是实现一些线性表的基本操作。包括(1)动态地建立循环链表;(2)实现循环链元素的插入,删除,查询;(3)使用双向链的结构实现判断一个录入的字符串是否是回文;(4)建立一个单向链表,实现其内元素非递减排序。

LED循环彩灯课程设计

××学院 《模拟电子技术》课程设计 题目 LED循环彩灯 学生姓名××× 专业班级电科(3)班 学号 201231000 院(系)电气工程学院 指导教师××

完成时间 2013年12月17日

目录 1、课程设计的目的 (1) 2、课程设计的任务与要求 (2) 2.1实验器材 (2) 2.2电子器件的识别 (2) 2.3焊接技术 (2) 2.4元器件安装及要求: (3) 3、设计方案与论证 (3) 3.1功能分析与具体要求 (3) 3.2设计思路 (4) 4、设计原理及功能说明 (4) 5、单元电路的设计(计算与说明) (6) 6、硬件的制作与调试 (7) 7、总结 (10) 参考文献: (12)

附录1:总体电路原理图.......................错误!未定义书签。附录2:元器件清单.. (14)

1、课程设计的目的 当今世界,彩灯已经成为我们生活的一部分,能给我们带来视觉上的享受还能美化我们的环境。街角巷里,高楼大厦无处不是因它炫彩夺目以及控制简单等特点而得到了广泛的应用,用LED彩灯来装饰街道和城市建筑已经成为一种潮流。发光二极管简称为LED。它是一种能发光的半导体电子元件。这种电子元件早在1962年出现,早期只能发出低光度的红光,之后发展出其他单色光的版本,时至今日能发出的光已遍及可见光、红外线及紫外线,光度也提高到相当的光度。具有效率高、寿命长、不易破损、开关速度高、高可靠性等传统光源不及的优点。白光LED的发光效率,在近几年来已经有明显的提升。因此人们现在更侧重于用LED来照明以及装饰屋内及屋外环境,LED广泛应用与生活的各个方面,不断走进人们的生活也不断地改变着人们的生活。 本实验主要是结合我们以往所学课程的基础理论、基本技能和专业知识的能力,不仅要考虑总体电路的设计还要考虑系统各部分电路的选择、设计及它们之间的相互连接。主要目的是在实践中逐步培养我们建立正确的设计思想,掌握工程设计的一般程序、规范和方法。 (1)了解各种元器件的性能、作用和工作原理; (2)掌握一定的焊接技术以及简单元器件装配; (3)学习印刷电路板;

基于plc设计的彩灯循环课程设计论文

专科课程设计(论文)设计题目:基于PLC设计的彩灯循环 系部:电气工程系 专业:电气工程及其自动化 班级:电气自动化111302

摘要 可编程控制器是60年代末在美国首先出现的,当时叫可编程逻辑控制器PLC(ProgrammableLogicController),目的是用来取代继电器。以执行逻辑判断、计时、计数等顺序控制功能。提出PLC概念的是美国通用汽车公司。PLC的基本设计思想是把计算机功能完善、灵活、通用等优点和继电器控制系统的简单易懂、操作方便、价格便宜等优点结合起来,控制器的硬件是标准的、通用的。根据实际应用对象,将控制内容编成软件写入控制器的用户程序存储器内,使控制器和被控对象连接方便。 70年代中期以后,PLC已广泛地使用微处理器作为中央处理器,输入输出模块和外围电路也都采用了中、大规模甚至超大规模的集成电路,这时的PLC 已不再是仅有逻辑(Logic)判断功能,还同时具有数据处理、PID调节和数据通信功能。国际电工委员会(IEC)颁布的可编程控制器标准草案中对可编程控制器作了如下的定义:可编程控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用了可编程序的存储器,用来在其内部存储执行逻辑运算,顺序控制、定时、计数和算术运算等操作的指令,并通过数字式和模拟式的输入和输出,控制各种类型的机械或生产过程。可编程控制器及其有关外围设备,易于与工业控制系统联成一个整体,易于扩充其功能的设计。 可编程控制器对用户来说,是一种无触点设备,改变程序即可改变生产工艺。目前,可编程控制器已成为工厂自动化的强有力工具,得到了广泛的普及推广应用。 可编程控制器是面向用户的专用工业控制计算机,具有许多明显的特点。 ①可靠性高,抗干扰能力强; ②编程直观、简单; ③适应性好; ④功能完善,接口功能强。 \

用双向循环链表求解约瑟夫环

用双向循环链表求解约瑟夫环 学校:东北大学 专业:计算机科学与技术

1.问题描述 Josephus排列问题定义如下:假设n个竞赛者排成一个环形。给定一个正整数m≤n,从第1人开始,沿环计数,第m人出列。这个过程一直进行到所有人都出列为止。最后出列者为优胜者。全部出列次序定义了1,2,…n的一个排列。称为(n,m)Josephus排列。例如,(7,3)Josephus排列为3,6,2,7,5,1,4。【实验要求】 设计求解Josephus排列问题程序。 (1)采用顺序表、单链表或双向循环链表等数据结构。 (2)采用双向循环链表实现Josephus排列问题,且奇数次顺时针轮转,偶数次逆时针轮转。 (3)推荐采用静态链表实现Josephus排列问题。 2.需求分析 本程序要求根据输入的人数n和给定的正整数m,求得约瑟夫排列,且奇数次顺时针轮转,偶数次逆时针轮转。故可利用双向循环链表建立存储结构,利用双向循环链表的遍历与删除操作实现功能要求。 3.概要设计 1.抽象数据类型定义: typedef struct DuLNode { int data; struct DuLNode *prior; struct DuLNode *next; }DuLNode,*DuLinkList; //定义双向循环链表 2.基本操作 int InitList_Dul(DuLinkList &L) //建立一个只含头结点的空双向循环链表 int CreateList_DuL(DuLinkList &L,int n) //建立一个带头结点的含n个元素的 双向循环链表L int ListDelete_DuL(DuLinkList &L,DuLinkList x) //删除指针x指向的结点 3.设计思路 首先建立一个双向循环链表作为存储结构,每个结点的数据域存储每个人的编号,然后根据给定的m值对整个链表进行遍历,找到所要找的结点后,输出该结点的数据域的值,并在双向循环链表中删除该结点,重复这样的操作,一直到所有的人都出列,依次输出的数列即为所求的Josephus排列。 4.详细设计 typedef struct DuLNode { int data; struct DuLNode *prior;

循环彩灯课程设计知识讲解

循环彩灯课程设计

精品资料 成绩 课程设计说明书 题目:循环彩灯电路设计 课程名称:数字电子技术学 院:电子信息与电气工程学院 学生姓名:李倩 学号: 201102020025 专业班级:电子信息工程2011级1班 指导教师:翟亚芳 2013 年6 月7 日

课程设计任务书

循环彩灯 摘要:设计制作了一个循环彩灯控制电路,该电路可以控制8个彩灯从左到右依次点亮,然后依次熄灭,点亮和熄灭的时间间隔为1秒。电路主要由555定时器、同步十六进制加法计数器74LS161和8位串行输入、并行输出移位寄存器74LS164以及2输入端4与非门74LS00组成。555定时器可以产生振荡周期为1秒的时钟信号;74LS161对时钟信号进行加法计数;74LS00对74LS161产生的信号进行取反,74LS164对 74LS00输出的信号移位寄存输出并驱动对应的发光二极管工作,使其可以达到可以依次点亮依次熄灭的目的。 关键词:555定时器;加法计数器;反相器;移位寄存器;

目录 1.设计背景 (1) 1.1 了解数字电路系统和数字电路的定义和组成 (1) 1.2掌握时钟电路的作用及基本构成 (1) 2.设计方案 (1) 2.1 任务分析…………………………………………………………………… 1 2.2方案论证 (2) 3.方案实施 (2) 3.1 原理图设计………………………………………………………………… 2 3.2电路仿真 (4) 3.3PCB制作 (5) 3.4安装与调试 (6) 4.结果与结论 (6) 5.收获与致谢 (6) 6.参考文献 (7) 7.附件 (7) 7.1电路原理图 (8) 7.2仿真图 (8) 7.3P C B布线图 (9)

单链表转换成双向循环链表

#include #include struct linklist { int data; struct linklist *pre; struct linklist *next; }; typedef struct linklist List; void One_To_Double(List *head); void main() { int i=1,sum; List *head,*q,*p; head=(List *)malloc(sizeof(List)); head->pre=NULL; printf("输入链表的长度:"); scanf("%d",&sum); p=(List *)malloc(sizeof(List)); p->data=i; head->next=p; p->next=NULL; p->pre=head; i++; while(i<=sum) { q=(List *)malloc(sizeof(List)); q->data=i; q->next=NULL; q->pre=NULL; p->next=q; p=q; i++; } p=head->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } One_To_Double(head); } void One_To_Double(List *head) {

int i=-1; List *p,*data1,*q,*Last; data1=(List *)malloc(sizeof(List)); p=(List *)malloc(sizeof(List)); q=(List *)malloc(sizeof(List)); data1=head->next;//记住第一个数据地址 p=head->next; while(p->next!=NULL) { q=p; //q是前一个节点 p=p->next; //p是后一个节点 p->pre=q; //后一个节点的【前继指针】指向前一个节点的地址} Last=p; //p 就是【最后一个数据】的地址 data1->pre=Last; //【第一个元素】的【前继指针】指向【最后一个元素】的地址Last->next=data1; //【最后一个元素】的【后继指针】指向【第一个元素】的地址//双向链表构成 p=Last; printf("\n\n"); while(p->data!=1) { printf("%d ",p->data); p=p->pre; } printf("%d \n",p->data); }

双向链表基本操作

双向链表 输入一个双向链表,显示些双向链表并对此双向链表排序运行结果: 源程序: #include #include #include

typedef struct Link/*双向链表结构体*/ { int data; struct Link *lift; struct Link *right; }linkx,*linky; linky Init();/*建立双向链表*/ void PrLink(linky p);/*输出双向链表*/ linky Sort(linky head);/*对双向链表排序*/ linky Swap(linky head,linky one,linky two);/*任意交换双向链表两个结点的地址*/ void main(void) { linky head; head=Init(); head=Sort(head); PrLink(head); } linky (Init())/*建立链表*/ { linky p,q,head; int n=0; head=p=q=(linky)malloc(sizeof(linkx)); printf("排序前的链表: "); scanf("%d",&p->data);/*输入数据*/ head->lift=NULL; n++; while(n!=10)/*一直输入到规定的数字个数停止*/ { q=p;

p=(linky)malloc(sizeof(linkx)); scanf("%d",&p->data);/*输入数据*/ q->right=p; p->lift=q; n++; } p->right=NULL; return(head); } linky Swap(linky head,linky one,linky two)/*任意交换两个结点*/ {linky temp; if(one->lift==NULL&&two->right==NULL)/*首和尾巴的交换*/ { if(one->right==two)/*只有两个结点的情况下*/ { two->right=one; two->lift=NULL; one->lift=two; one->right=NULL; head=two; } else/*有间隔的首尾交换*/ { one->right->lift=two; two->lift->right=one; two->right=one->right; one->lift=two->lift; two->lift=one->right=NULL; head=two;/*尾结点成为头结点*/ }

循环彩灯课程设计

成绩 课程设计说明书 题目:循环彩灯电路设计 课程名称:数字电子技术 学院:电子信息与电气工程学院 学生姓名:李倩 学号:201102020025 专业班级:电子信息工程2011级1班 指导教师:翟亚芳 2013 年6 月7 日

课程设计任务书设计题目循环彩灯 学生姓名李倩所在学院电子信息与电气工 程学院 专业、年级、班 电子信息工程 2011级1班 设计要求: 1、设计制作一个循环彩灯电路; 2、设置彩灯数量为8个,8个彩灯从左到右依次点亮,然后依次熄灭,点亮和熄灭的时间间隔为1秒。 学生应完成的工作: 设计循环彩灯的工作原理,并利用Multisim软件进行电路仿真。利用DXP软件绘制电路原理图,并设计制作电路的PCB板。根据设计原理对电路进行安装调试,完成课程设计工作,并提交课程设计报告。 参考文献: [1]童诗白.模拟电子技术基础[M].北京:高等教育出版社,2005. [2]臧春华.电子线路设计与应用[M].北京:高等教育出版社,2005. [3]邱关源,罗先觉.电路(第五版)[M].北京:高等教育出版社,2006. [4]阎石.数字电子技术(第五版)[M].北京:高等教育出版社,2005. [5]张阳天,韩异凡.Protel DXP电路设计[M].北京:高等教育出版社,2005. 工作计划: 5月27号—30完成原理图设计;5月31号进行PCB设计;6月3号到4号制作PCB板;6月5到7号电路板安装与调试,提交课程设计报告。 任务下达时期:2013 年5月27日 任务完成时期:2013年6月7 日 指导教师(签名):学生(签名):

循环彩灯 摘要:设计制作了一个循环彩灯控制电路,该电路可以控制8个彩灯从左到右依次点亮,然后依次熄灭,点亮和熄灭的时间间隔为1秒。电路主要由555定时器、同步十六进制加法计数器74LS161和8位串行输入、并行输出移位寄存器74LS164以及2输入端4与非门74LS00组成。555定时器可以产生振荡周期为1秒的时钟信号;74LS161对时钟信号进行加法计数;74LS00对74LS161产生的信号进行取反,74LS164对74LS00输出的信号移位寄存输出并驱动对应的发光二极管工作,使其可以达到可以依次点亮依次熄灭的目的。 关键词:555定时器;加法计数器;反相器;移位寄存器;

六路彩灯循环控制器数电课程设计

一.设计目的及要求 1.1 课程设计的目的 1 、巩固和加强《数字电子技术》课程的理论知识。 2 、掌握电子电路的一般设计方法,了解电子产品研制开发过程。 3 、掌握电子电路安装和调试的方法及其故障排除方法,学会用ewb 软件或multisim 软件对电路仿真。 4 、通过查阅手册和文献资料,培养独立分析问题和解决问题的能力。 5、培养创新能力和创新思维。 1.2 要求 用中规模集成电路实现6 路彩灯控制电路,主要用计数器、译码器、移位寄存器等芯片集成,实现以下5 种演示花型: 花型1:6 路彩灯同时亮; 花型2:6 路彩灯同时灭; 花型3:6 路彩灯从左至右逐路点亮; 花型4:6 路彩灯左侧三个全亮,同时右侧三个全灭; 花型5; 6 路彩灯右侧三个全亮,同时左侧三个全灭; 要求彩灯亮、灭一次的时间可调,花型转换的顺序为:花型1、花型2、花型3 、花型4,花型5 、花型1 电路有复位控制,复位按钮闭合时彩灯循环输出,按钮断开彩灯熄灭。 二、设计方案的选择和电路框图

2.1题目分析 我们设计的流水灯实际上是主要使用一个555定时器、一个 74LS160,—个74LS42和两个74HC194这四个芯片对,6个彩灯进行控制,产生循环控制的效果。 2.2 题目设计 花型1,111111 ;花型2,000000 ;花型3,100000 ——010000 ——001000——000100——000010——000001;花型4,111000 ;花型5,000111。用74HC194移位寄存器来实现。用74LS42译码器来实现对194的控制,实现194的清零,并行输入,以及右移。用 74LS160十进制计数器控制42译码器的输出,555定时器根据滑动电阻的调节来实现输出时钟脉冲周期的不同从而控制160 计数的快慢,也就实现了彩灯闪烁时间的可调。 2.3结构框图

双向循环链表list

list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素。在STL 中,list和vector 一样,是两个常被使用的容器。和vector不一样的是,list不支持 对元素的任意存取。list中提供的成员函数与vector类似,不过list提供对表首元素的操作 push_front、pop_front,这是vector不具备的。禾口vector另一点不同的是,list的迭代器不会存在失效的情况,他不像vector会保留备份空间,在超过容量额度时重新全部分配内存,导致迭代器失效;list没有备份空间的概念,出入一个元素就申请一个元素的空间,所以它的迭代器不会失效。还是举《C++之vector》中的 例子: int data[6]={3,5,7,9,2,4}; list< int> lidata(data, data+6); lidata.push_back(6); list初始化时,申请的空间大小为6,存放下了data中的6个元素,当向lidata插入第7个元素“6”,list申请新的节点单元,插入到list链表中,数据存放结构如图1所示: 插入节点"6拆之后的list 图1 list的存储结构 list每次增加一个元素,不存在重新申请内存的情况,它的成本是恒定的。而vector每当增加关键元素的时候,都需要重新申请新的更大的内存空间,会调用元素的自身的复制构造函数,存在构造成本。在销毁旧内存的时候,会调用析构函数, 存在析构成本。所以在存储复杂类型和大量元素的情况下,list比vector更有优势! List是一个双向链表,双链表既可以向前又向后链接他的元素。

数据结构实验 建立双向循环链表以及插入删除操作

实验一 要求:①建立双向循环链表 ②实现链表的插入、删除 运行程序点此处Demo_1.exe 实验程序源代码: #include "stdafx.h" #include #include #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int status; //双向循环链表的存储结构 typedef struct DuLNode { int data; int Length; struct DuLNode *prior; struct DuLNode *next; } DuLNode,*DuLinkList; //构建一个空的双向循环链表 void InitList(DuLNode **p) { *p=(DuLNode *)malloc(sizeof(DuLNode)); if(*p) { (*p)->next=(*p)->prior=*p; (*p)->Length=0; } else exit(OVERFLOW); } //双向循环链表的创建 void Create(DuLinkList &L,int n) { //输入n个元素的值,建立带头结点的双线循环链表L DuLinkList p=L,q; int i; for(i=1;i<=n;i++) { q=(DuLinkList)malloc(sizeof(DuLNode)); printf("您该输入第%d个元素的值了:",i); scanf("%d",&q->data);

p->next =q; q->prior=p; q->next=L; L->prior =q; p=q; L->Length ++; } } //查找元素的位置 DuLinkList GetElemP(DuLinkList h,int i) { int j; DuLinkList p=h; for(j=1;j<=i;j++) p=p->next ; return p; } //结点的插入 status Listinsert(DuLNode *m,int i,int e) { //在带头结点的双链循环线性表L中第i个位置之前插入元素e,i的合法值为1≤i≤表长 DuLinkList p,q; if(i<1||i>(m->Length)) // i值不合法 return ERROR; p=GetElemP(m,i); if(!p) return ERROR; q=(DuLinkList)malloc(sizeof(DuLNode)); if(!q) return OVERFLOW; q->data=e; q->prior=p->prior; p->prior->next=q; q->next=p; p->prior=q; m->Length++; printf("您在双向循环链表第%d个位置之前插入了一结点元素:%d\n",i,e); return OK; } //结点的删除 status ListDelete(DuLinkList L,int i) { //删除带头结点的双链循环线性表L的第i个元素,i的合法值为1≤i≤表长

主要的数据类型有两个带头结点的双向循环链表

主要的数据类型有两个带头结点的双向循环链表,这两个链表与MFC应用程序自动生成的对象类型混合使用,如下: typedef struct { //单个雨滴 COLORREF color;//雨滴颜色 bool visibility; //可见性 float radius; //半径 float x;//雨滴中心位置 x float y;//雨滴中心位置 y float xvelocity;//雨滴速率 vx float yvelocity;//雨滴速率 vy } droplet; struct dropletchain {//所有雨滴组成的链表 struct dropletchain * pre; droplet * drop; struct dropletchain * next; }; typedef struct {//单个涟漪 COLORREF color;//颜色 float xdrop;//涟漪中心 x float ydrop;//涟漪中心 y float radius;//涟漪半径 int shown;//是否绘制涟漪(这个参数在判断是否需要重绘时用到) }ripple; struct ripplechain {// 所有涟漪组成的链表 struct ripplechain * pre; ripple * aripple; struct ripplechain * next; }; 对链表的操作混杂在类CCrainDlg(mfc 的对话框类)中。 三、大致的程序流程: a) 在程序的初始化阶段定义了两个链表 struct dropletchain dc; struct ripplechain rc; 这两个都是空的链表,且 dc.drop=NULL; dc.pre=&dc; dc.next=&dc; rc.aripple=NULL;

循环彩灯控制器课程设计8路

数字电路课程设计报告课程名称:循环彩灯控制器 设计题目:循环彩灯控制器 院(部):机械与电子工程学院 专业: 学生姓名: 学号: 班级: 日期: 指导教师:

课程设计任务书 课程设计题目循环彩灯控制器 姓名学号班级 院部机械与电子工 程学院 专业 组别组长组员 指导教师 课程设计目的 1.进一步掌握数字电路课程所学的理论知识。 2.熟悉几种常用集成数字芯片的功能和应用,并掌握其工作原理,进一步学会使用其进行电路设计。 3.了解数字系统设计的基本思想和方法,学会科学分析和解决问题。 4.培养认真严谨的工作作风和实事求是的工作态度。 5.数点课程实验是大学中为我们提供的唯一一次动手实践的机会,增强动手实践的能力。 课程 设计 环境 用proteus 仿真软件画出总体电路图、word编写课程设计报告

课程设计任务和要求设计要求: 1. 8路彩灯能演示三种花型(花型自拟); 2. 彩灯用发光二极管LED模拟; 3.选做:实现快慢两种节拍的变换。 设计任务: 1.设计电路实现题目要求; 2.电路在功能相当的情况下设计越简单越好; 3. 注意布线,要直角连接,选最短路径,不要相互交叉; 4. 注意用电安全,所加电压不能太高,以免烧坏芯片和面包板。 课程设计工作进度计划 序号起止日期工作内容 1 2012年6月7日~2012年 6月11日选择设计题目并阅读相关文献、资料,学习使用proteus 2 2012年6月12日~2012 年6月13日 根据设计任务和要求,做出大纲和目录 3 2012年6月13日~2012 年6月16日 根据目录做出设计内容 4 2012年6月17日~2012 年6月18日 根据设计内容用proteus画图 5 2012年6月19日整理课程设计的格式与内容 6 2012年6月20日打印并装订 教研室审核意见: 教研室主任签字:年月日 教学院(系)审核意见: 主任签字:年月日

循环双向链表

#include #include "Dlink.h" int main(void) { DLink *L; int i = 0; ElemType e = '0'; //认真体会C语言拷贝传递的思想 InitList(&L); InsElem(L, 'a', 1); InsElem(L, 'b', 2); InsElem(L, 'c', 3); InsElem(L, 'd', 4); InsElem(L, 'e', 5); printf("线性表"); DispList(L); printf("长度:%d/n",GetLength(L)); i = 3; GetElem(L, i, &e); printf("第%d个元素:%c/n", i, e); e = 'a'; printf("元素%c是第%d个元素/n", e, Locate(L, e)); i = 4; printf("删除第%d个元素/n", i); DelElem(L, i); printf("线性表:"); DispList(L); /**/ return 0; } [cpp] view plaincopyprint? #ifndef DLINK #define DLINK typedef char ElemType;

typedef struct node { ElemType data; struct node *prior, *next; }DLink; void InitList(DLink **L); //初始化运算 int GetLength(DLink *L); //求表长运算 int GetElem(DLink *L, int num, ElemType *e); //求线性表中第i个元素运算int Locate(DLink *L, ElemType x); //按值查找运算 int InsElem(DLink *L, ElemType x, int i); //插入节电运算 int DelElem(DLink *L, int num); //删除结点运算 void DispList(DLink *L); //输出线性表 #endif [cpp] view plaincopyprint? #include #include "Dlink.h" #include /************************************************ ** 函数名:void InitList(DLink **L) ** 功能:初始化线性表运算 ** 描述:无 ** 作者:/***/ *************************************************/ void InitList(DLink **L) { *L = (DLink *)malloc(sizeof(DLink)); (*L)->prior = (*L)->next = *L; } /************************************************ ** 函数名:int getLength(DLink *L) ** 功能:获取链表的长度 ** 描述:无 ** 作者:/***/ *************************************************/ int GetLength(DLink *L)

循环彩灯课程设计

数字电路课程设计(学年设计、学年论文)任务书

数字电路设计说明书

学院名称:计算机与信息工程学院 班级名称:网络工程4班 学生姓名: 学号: 题目:循环彩灯控制器设计 指导教师 姓名: 起止日期:2013.12.1至2014.1.3 第一部分:正文部分 一、选题背景(标题:四号仿宋加粗,顶格,行间距:24磅,上下间距:段前0.5行,段后0.5行)(内容:用小四号仿宋,首行空两格) 1.应解决的主要问题 1.1了解数字电路系统的定义及组成:数字电路系统一般包括输入电路、控制电路、输出电路、时钟电路和电源等。输入电路主要作用是将被控信号转换成数字信号,其形式包括各种输入接口电路。比如数字频率计中,通过输入电路对微弱信号进行放大、整形,得到数字电路可以处理的数字信号。模拟信号则需要通过模数转换电路转换成数字信号再进行处理。在设计输入电路时,必须首先了解输入信号的性质,接口的条件,以设计合适的输入接口电路。

1.2掌握时钟电路的作用及基本构成:时钟电路是数字电路系统中的灵魂,它属于一种控制电路,整个系统都在它的控制下按一定的规律工作。时钟电路包括主时钟振荡电路及经分频后形成各种时钟脉冲的电路。比如多路可编程控制器中的555多谐振荡电路信号结合产生系统所需的各种时钟脉冲。 2.应达到的要求 通电后彩灯能自动点亮并循环;具有顺时针和逆时针循环选择;循环频率可调;具有复位、暂停、继续等按钮;采用市电供电,自行设计电源电路。 (说明本课题应解决的主要问题及应达到的要求。) 二、相关知识 2.1 题目分析 我们设计的流水灯实际上是主要使用一个555定时器、一个74LS160,一个74LS42和两个74HC194,这四个芯片对,6个彩灯进行控制,产生循环控制的效果。 2.2题目设计 花型1,111111;花型2,000000;花型3,100000——010000——001000——000100——000010——000001;花型4,111000;花型5,000111。用74HC194移位寄存器来实现。用74LS42译码器来实现对194的控制,实现194的清零,并行输入,以及右移。用74LS160十进制计数器控制42译码器的输出,555定时器根据滑动电阻的调节来实现输出时钟脉冲周期的不同从而控制160计数的快慢,也就实现了彩灯闪烁时间的可调。 2.3 结构框图

循环彩灯控制器课程设计之欧阳家百创编

数字电路课程设计报告 欧阳家百(2021.03.07) 课程名称:循环彩灯控制器设计题目:循环彩灯控制器 院(部):机械与电子工程学院 专业: 学生姓名: 学号: 班级: 日期: 指导教师: 课程设计任务书

目录 1.摘要 (4)

2.关键字 (4) 3.设计背景 (4) 3.1 了解数字电路系统的定义及组成 (4) 3.2 掌握时钟电路的作用及基本构成 (4) 4.设计方案的选择 (5) 5.单元电路的设计 (6) 5.1 花型控制电路的设计 (6) 5.2 花型演示电路的设计 (10) 5.3 节拍控制电路的设计 (10) 5.4 时钟信号电路的设计 (11) 6.总体电路图 (12) 7.各个单元电路的输入输出波形 (12) 8.电路调试 (15) 9.元器件清单 (16) 10.分析与总结 (17) 11.致谢 (19) 12.参考文献 (19) 13.指导教师评语 (20) 循环彩灯控制器的设计 1.摘要 本次循环彩灯的设计制作由时钟信号CP电路、花型控制电路、花型演示电路、节拍控制电路构成的集成电路来实现,其中

花型控制电路由1614位二进制同步计数器完成,花型演示电路由195 双向移位寄存器完成(可左移右移完成花型变化),节拍变化由151八选一数据选择器完成,节拍的快慢变化可有74双上升沿D触发器完成,它可实现二分频。 2.关键字 循环彩灯、时钟信号CP电路、花型控制电路、花型演示电路、节拍控制电路。 3.设计背景 3.1了解数字电路系统的定义及组成 数字电路系统一般包括输入电路、控制电路、输出电路、时钟电路和电源等。输入电路主要作用是将被控信号转换成数字信号,其形式包括各种输入接口电路。比如数字频率计中,通过输入电路对微弱信号进行放大、整形,得到数字电路可以处理的数字信号。模拟信号则需要通过模数转换电路转换成数字信号再进行处理。在设计输入电路时,必须首先了解输入信号的性质,接口的条件,以设计合适的输入接口电路。 3.2掌握时钟电路的作用及基本构成 时钟电路是数字电路系统中的灵魂,它属于一种控制电路,整个系统都在它的控制下按一定的规律工作。时钟电路包括主时钟振荡电路及经分频后形成各种时钟脉冲的电路。比如多路可编程控制器中的555 多谐振荡电路,数字频率计中的基准时间形成电路等都属于时钟电路。设计时钟电路,应根据系统的要求首先确定主时钟的频率,并注意与其他控制信号结合产生系统所需的各种时钟脉冲。

相关文档
相关文档 最新文档