单链表程序设计

单链表程序设计
单链表程序设计

课程设计(论文)

题目名称单链表的基本操作

课程名称C语言程序设计

学生姓名陈瑶

学号1041303005

系、专业信息工程系、通信工程

指导教师成娅辉

2011年06月29 日

目录

1 前言............................................................................. 错误!未定义书签。

2 需求分析..................................................................... 错误!未定义书签。

2.1 课程设计目的 ................................................... 错误!未定义书签。

2.2 课程设计任务 ................................................... 错误!未定义书签。

2.3 设计环境 ........................................................... 错误!未定义书签。

2.4 开发语言 ........................................................... 错误!未定义书签。

3 分析和设计............................................................................................... -

4 -

3.1 模块设计 ......................................................................................... - 4 -

3.3 主要模块的流程图 ........................................... 错误!未定义书签。

4 具体代码实现 ............................................................ 错误!未定义书签。

5 课程设计总结 ............................................................ 错误!未定义书签。

5.1 程序运行结果 ................................................... 错误!未定义书签。

5.2 课程设计体会 ................................................... 错误!未定义书签。参考文献......................................................................... 错误!未定义书签。致谢............................................................................. 错误!未定义书签。

1 前言

编写一个C语言程序,实现单链表的基本操作。通过一个main函数,并运用结构体和指针,建立四个子函数,分别用来实现单链表的建立、输出、插入、删除操作。输入一组数据以-1为结束标志,然后运行并在屏幕上显示结果。

2 需求分析

2.1 课程设计目的

学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计,提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计打基础。2.2课程设计任务与要求

输入一组正整数,以-1标志结束,用函数实现:(1)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;(2)往该链表中插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;(3)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。

(1)用C语言实现程序设计;

(2)利用结构体、指针进行相关信息处理;

(3)画出主要模块的流程图;

(4)系统的各个功能模块要求用函数的形式实现;

(5)界面友好(良好的人机互交),程序要有注释。

2.3设计环境

(1)WINDOWS2000/XP系统

(2)TurboC2.0编译环境

2.4开发工具

C语言

3 分析和设计

3.1 模块设计

(1)在程序的开头部分定义了结构体类型:

typedef struct node

{int data;

struct node *next;

}NODE;

用来存放数据信息,从而定义链表结点类型。

(2)接着通过定义一个create_llist_sorted()函数建立单链表,定义output(NODE *h)”,“insert(NODE *h, int x)”,“delete(NODE *h, int i)”等一系列的函数,实现链表的输出、插入、删除等操作,通过mian()函数来调用各个子函数,最终得到结果。

3.2系统流程图

图3.1 系统流程图

3.3主要模块的流程图

图3.2.3插入函数流程图

图3.2.4 删除函数流程图

4 具体代码实现

源程序代码:

#include "stdio.h"

#include "math.h"

#include "string.h"

#include "stdlib.h"

typedef struct node

{int data;

struct node *next;

}NODE; /*链表结点类型定义*/

/********函数声明********/

NODE *create_llist_sorted();

/*建立一个非递减有序的带头结点的单链表,返回其头指针*/

void output(NODE *h); /*输出头指针h所指单链表*/

NODE *insert(NODE *h, int x); /*将元素x插入到单链表h中仍有序*/ NODE *del(NODE *h, int i); /*删除单链表h中第i个结点*/

/******主函数******/

void main()

{NODE *head;int x,i;

head=create_llist_sorted();

output(head);

printf("\nplease input inserted data:");

scanf("%d",&x);

insert(head,x);

output(head);

printf("\nplease input deleted location:");

scanf("%d",&i);

del(head,i);

output(head);

}

/********子函数********/

NODE *create_llist_sorted()

/*建立一个非递减有序的带头结点的单链表,返回其头指针*/

{int x;NODE *h,*p,*q,*s; /*p指向单链表中某一结点,q指向*p的前驱*/

h=(NODE * )malloc(sizeof(NODE));h->next=NULL;

scanf("%d",&x);

while(x!=-1)

{s=( NODE * )malloc(sizeof(NODE));/*生成一个结点,用指针S指向*/

s->data=x; s->next=NULL;

for(q=h,p=h->next; p!=NULL&&s->data>p->data;p=p->next,q=q->next); /*不断比较,找到插入位置*/

q->next=s;s->next=p;

scanf("%d",&x);

}

return h;

}

void output(NODE *h) /*输出头指针h所指单链表*/

{NODE *p;

for(p=h;p!=NULL;p=p->next)

printf("%8d",p->data);

}

NODE *insert(NODE *h, int x) /*将元素x插入到单链表h中仍有序*/

{ NODE *p,*q,*p0;

q=h;p=h->next;

scanf("%d",&x);

p0=(NODE*)malloc(sizeof(NODE));

p0->data=x;p0->next=NULL;

for(;p0->data>p->data&&p!=NULL;p=p->next,q=q->next);

p0->next=p;q->next=p0;

return h;

}

NODE *del(NODE *h, int i) /*删除单链表h中第i个结点*/ { NODE *q,*p;int n=0;

q=h;p=h->next;

scanf("%d",&i);

while(n

{q=q->next;p=p->next;n++;}

if(n==i-1)

p->next=p->next->next;

return h;

}

5 课程设计总结

5.1程序运行结果

5.2课程设计体会

本次C语言课程设计我是按照任务书上的要求来完成的,虽然还存在比较多的瑕疵,但我是用我饱满的热情、认真的态度去对待本次课程设计的。本次课程设计,我设计的是一实现单链表的基本操作的程序,本程序主要是要运用结构体及指针和函数来实现的。这次课程设计主要是要让我们更好的结合和运用所学知识完成。若完全靠自己掌握的知识来独立完成,还是有一定的困难,在我的指导老师成娅辉老师的耐心指导下,我才能顺利的完成我的课程设计。

参考文献

[1]张福祥. C语言程序设计[M]. 辽宁大学出版社,2008.1

[2]张福祥,王萌.C语言程序设计习题解答与实验实沈阳:辽宁大学出版社,2008.

[3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.

致谢

这次C语言课程设计让我收获不少,虽然这次我这组的课程设计题目不是很难,但要做好也不简单。在成娅辉老师的指导和组员的合作下,我得以顺利地完成本次课程设计,并努力使设计更加完美。在此,我要感谢指导老师以及组员,感谢他们对我的帮助。与组员合作使我认识到团队精神的重要性。再一次感谢所有帮助我完成这次课程设计的人。谢谢!本次C语言课程设计是在我的指导老师成老师的精心指导和大力支持下完成的。成老师严谨求实的治学态度,高度的敬业精神,兢兢业业,孜孜不倦的工作作风和大胆创新的进取精神对我产生重要影响。成老师渊博的知识,开阔的视野和敏锐的思维给了我深深的启迪。在设计的过程中我发现了自己许多不足之处,成老师给我提出了许多宝贵的意见和建议,

使我顺利的完成了课程设计。同时,在此次课程设计过程中我也学到了许多关于计算机应用方面的知识,试验技能有了很大的提高。

另外,我还要特别感谢同学们对我课程设计的指导,他们为我完成课程设计提供了巨大的帮助。最后,再次对关心,帮助我的老师和同学表示衷心地感谢!

在课程设计即将完成之际,我的心情无法平静,从开始进入课程设计到课程设计的顺利完成,有许多可敬的师长同学给了我无言的帮助。在这里再次接受我诚挚的感谢。

实验一 顺序表与链表 成品

实验一顺序表与链表 一、实验目的 1、掌握线性表中元素的前驱、后续的概念。 2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。 二、实验预习 说明以下概念 1、线性表:线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限 序列。 2、顺序表:线性表的顺序存储结构或顺序映像,通常,称这种存储结构的线性表为顺序表。 3、链表:指针域中存储的信息称作指针或链。N个接点连接成一个链表,故又称线性链表。 三、实验内容和要求 1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。 ●#include ●#include ●#define ERROR 0 ●#define OK 1 ● ●#define INIT_SIZE 5 /*初始分配的顺序表长度*/ ●#define INCREM 5 /*溢出时,顺序表长度的增量*/ ●typedef int ElemType; /*定义表元素的类型*/ ●typedef struct Sqlist{ ●ElemType *slist; /*存储空间的基地址*/ ●int length; /*顺序表的当前长度*/ ●int listsize; /*当前分配的存储空间*/ ●}Sqlist; ● ●int InitList_sq(Sqlist *L); /* 构造一个空的线性表L */ ●int CreateList_sq(Sqlist *L,int n); /* 不断地插入元素 */ ●int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插 入一个数据元素e,L的长度加1 */ ●int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/ ●int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/

excel表格的基本操作快捷指令

excel表格的基本操作 Excel 快捷键和功能键 Ctrl 组合快捷键 按键说明 Ctrl+( 取消隐藏选定范围内所有隐藏的行。 Ctrl+) 取消隐藏选定范围内所有隐藏的列。 Ctrl+& 将外框应用于选定单元格。 Ctrl+_ 从选定单元格删除外框。 Ctrl+~ 应用“常规”数字格式。 Ctrl+$ 应用带有两位小数的“货币”格式(负数放在括号中)。 Ctrl+% 应用不带小数位的“百分比”格式。 Ctrl+^ 应用带有两位小数的“指数”格式。 Ctrl+# 应用带有日、月和年的“日期”格式。 Ctrl+@ 应用带有小时和分钟以及AM 或PM 的“时间”格式。 Ctrl+! 应用带有两位小数、千位分隔符和减号(-)(用于负值)的“数值”格式。Ctrl+- 显示用于删除选定单元格的“删除”对话框。 Ctrl+* 选择环绕活动单元格的当前区域(由空白行和空白列围起的数据区域)。在数据透视表中,它将选择整个数据透视表。 Ctrl+: 输入当前时间。 Ctrl+; 输入当前日期。 Ctrl+` 在工作表中切换显示单元格值和公式。 Ctrl+' 将公式从活动单元格上方的单元格复制到单元格或编辑栏中。 Ctrl+" 将值从活动单元格上方的单元格复制到单元格或编辑栏中。 Ctrl++ 显示用于插入空白单元格的“插入”对话框。 Ctrl+1 显示“单元格格式”对话框。 Ctrl+2 应用或取消加粗格式设置。 Ctrl+3 应用或取消倾斜格式设置。 Ctrl+4 应用或取消下划线。 Ctrl+5 应用或取消删除线。 Ctrl+6 在隐藏对象、显示对象和显示对象占位符之间切换。 Ctrl+7 显示或隐藏“常用”工具栏。 Ctrl+8 显示或隐藏大纲符号。 Ctrl+9 隐藏选定的行。 Ctrl+0 隐藏选定的列。 Ctrl+A 选择整个工作表。 如果工作表包含数据,则按Ctrl+A 将选择当前区域。再次按Ctrl+A 将选择整个工作表。 当插入点位于公式中某个函数名称的右边时,则会显示“函数参数”对话框。

实验二 链表操作实现

实验二链表操作实现 实验日期: 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[]);/*保存单链表到文件*/

实验1-2顺序表和链表基本操作_参考答案

实验1、2:线性表的应用参考代码 一、实验预备知识 1.复习C中编写函数的相关内容。 2.复习如何用主函数将多个函数连在一起构成一个C完整程序。 二、实验目的 1.掌握线性表的顺序和链式存储结构 2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1.编写初始化并创建线性表和输出线性表的算法。 2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3.编写有序表的插入和删除运算算法。 4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。 5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验内容 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。(开辟的存储空间大小为8) 3.编写顺序表输出算法。 4.依次插入3、21、15、99四个数,分别插入在第1、8、4和12位置,每插入一次都要输出一次顺序表。 5.删除第1,第9和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.向有序表分别插入20和50,插入后表仍然有序。(修改开辟的存储空间大小为15)

单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法均可)。 3.编写单链表输出算法。 4.依次插入3、21、15、99四个数,分别插入在第1、8、4和12位置,每插入一次都要输出一次单链表。 5.删除第1,第9和第12个位置上的元素,每删除一个元素都要输出一次单链表。 6.编写一个排序算法,对链表中元素从小到大排列。 7.向有序链表分别插入20和50,插入后表仍然有序。 五、实验结果 顺序表源程序: #include using namespace std; const int MAXSIZE=8; //做有序表插入操作时,将8改为15 typedef int DataType; typedef struct { DataType data[MAXSIZE]; int length; }SeqList; void Init_SeqList(SeqList &L);//创建空顺序表算法 void Show_SeqList(SeqList L);//顺序表输出算法 void Create_SeqList(SeqList &L);//顺序表创建算法 int Insert_SeqList(SeqList &L,DataType x,int i);//顺序表的插入算法 int Delete_SeqList(SeqList &L,int i);//顺序表的删除算法 int Locate_SeqList(SeqList L,DataType x);//顺序表的按值查找算法

《数据结构》实验报告 设计循环单链表

《数据结构》实验报告 1、实验名称:设计循环单链表 2、实验日期: 2013-3-26 3、基本要求: 1)循环单链表的操作,包括初始化、求数据元素个数、插入、删除、取数据元素; 2)设计一个测试主函数实际运行验证所设计循环单链表的正确性。 4、测试数据: 依次输入1,2,3,4,5,6,7,8,9,10,删除5,再依次输出数据元素。 5、算法思想或算法步骤: 主函数主要是在带头结点的循环单链表中删除第i个结点,其主要思想是在循环单链表中寻找到第i-1个结点并由指针p指示,然后让指针s指向a[i]结点,并把数据元素a[i]的值赋给x,最后把a[i]结点脱链,并动态释放a[i]结点的存储空间。 6、模块划分: 1)头文件LinList.h。头文件LinList.h中包括:结点结构体定义、初始化操作、求当前数据个数、插入一个结点操作、删除一个结点操作以及取一个数据元素操作; 2)实现文件dlb.cpp。包含主函数void main(void),其功能是测试所设计的循环单链表的正确性。

7、数据结构: 链表中的结点的结构体定义如下: typedef struct Node { DataType data; struct Node *next; }SLNode; 8、源程序: 源程序存放在两个文件中,即头文件LinList.h和实现文件dlb.cpp。//头文件LinList.h typedef struct Node { DataType data; struct Node *next; }SLNode; void ListInitiate(SLNode **head) //初始化 { *head=(SLNode *)malloc(sizeof(SLNode)); //申请头结点,由head指示其地址 (*head)->next=*head; }

数据结构 单链表基本操作代码

实验一单链表 #include "stdio.h" #include "stdlib.h" typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; void creatLNode(LinkList &head) { int i,n; LNode *p; head=(LNode*)malloc(sizeof(LNode)); head->next=NULL; printf("请输入链表的元素个数:"); scanf("%d",&n); for(i=n;i>0;i--) { p=(LNode*)malloc(sizeof(LNode)); printf("第%d个元素:",i); scanf("%d",&p->data); p->next=head->next; head->next=p; } } void InsertLNode(LinkList &L) { LNode *p=L; int i,j=0,e; printf("请输入你要插入的位置(超过链表长度的默认插在最后!):"); scanf("%d",&i); printf("请输入你要插入的元素:"); scanf("%d",&e); while (p->next&&jnext; ++j; }

LNode *s; s=(LNode*)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; } int DeleteLNode(LinkList &L,int i,int &e) { LNode *p; p=L; LNode *q; int j=0; while (p->next&&jnext; ++j; } if(!(p->next)||j>i-1) { printf("删除位置不合理!\n"); return 0; } q=p->next; p->next=q->next; e=q->data; free(q); return e; } void DeleteCF(LinkList &L) { LNode *p,*s,*r; p=L->next; while(p!=NULL) { r=p; s=r->next; while(s!=NULL) { if(p->data==s->data) { r->next=s->next; s=s->next;

实验1顺序表和链表基本操作(给学生)

实验一、二:线性表的应用 班级学号姓名 一、实验预备知识 1 复习C++中编写函数的相关内容。 2 复习如何用主函数将多个函数连在一起构成一个C++完整程序。 二、实验目的 1 掌握线性表的顺序和链式存储结构 2 熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3 熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1 编写初始化并创建线性表和输出线性表的算法。 2 编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3 编写一个主函数,将上面函数连在一起,构成一个完整的程序。 4将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验步骤 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。 3.编写顺序表输出算法。(内存中开辟的单元数为8) 4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。 3.编写单链表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。 五、实验结果 1.给出程序清单及输入/输出结果。 2.实验过程中遇到的问题、解决方法及心得体会。

实现单链表的各种基本运算

实现单链表的各种基本运算 一、实验目的 了解单链表表的结构特点及有关概念,掌握单链表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化单链表; 2、单链表的插入; 3、单链表的输出; 4、求单链表的长度 5、判断单链表是否为空; 6、输出单链表的第i位置的元素; 7、在单链表中查找一个给定元素在表中的位置; 8、单链表的删除; 9、释放单链表 三、算法思想与算法描述简图

主函数main void InitList(LinkList*&L) 初始化单链表L void DestroyList(LinkList*&L)//释放单链表L int ListEmpty(LinkList*L)//判断单链表L是否为空集 int Listlength(LinkList*L)//返回单链表L的元素个数 void DispList(LinkListt*L)//输出单链表L int GetElem(LinkList*L,int i,char e)/*ElemType e)获 取单链表L中的第i个元素*/ int LocateEmpty(LinkList*L,char e)/*ElemType e)在单 链表L中查找元素e*/ int ListInsert(LinkList*&L,int i,char e)/*ElemType e) 在单链表中第i个位置上插入元素e*/ int ListDelete(LinkList*&L,int i,char &e)/*ElemType e)在单链表L中删除第i个元素*/

四、实验步骤与算法实现 #include #include typedef char ElemType; typedef struct LNode//定义单链表 { ElemType data; struct LNode *next; }LinkList; void InitList(LinkList*&L) { L=(LinkList*)malloc(sizeof(LinkList));//创建头结点 L->next=NULL;//头结点赋值为空 } void DestroyList(LinkList*&L)//销毁单链表(释放单链表L占用的内存空间即逐一释放全部结点的空间) { LinkList*p=L,*q=p->next; while(q!=NULL) {free(p); p=q; q=p->next;} free(p); } int ListEmpty(LinkList*L)//判线性表是否为空表ListEmpty(L) { return(L->next==NULL);}//若单链表L没有数据结点,则返回真,否则返回假。 int ListLength(LinkList*L)//求线性表的长度ListLength(L) { LinkList*p=L;int i=0; while(p->next!=NULL)

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

*******大学 《数据结构与算法分析》课程设计 题目:数据结构上机试题 学生姓名: 学号: 专业:信息管理与信息系统 班级: 指导教师: 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有解释)

数据结构C语言版顺序表和单链表的逆置

数据结构C语言版顺序表和单链表的逆置 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

实验1-1 顺序表的逆置操作 程序原码 #include<> // 创建顺序表,确定元素个数,插入各个元素,逆置列表。#include<> #include<> #define max_list_size 100 //定义给顺序表分配空间大小 typedef struct{ int *elem; int length; }list_node; //指向顺序表首地址的结构体单元 list_node L; //这里使用了全局变量,在所有的函数里可以随意修改其值int list[max_list_size]; void init(); // 初始化操作 void inversion(); // 倒置部分

void creat(); // 建表部分 void display(); // 显示部分 //*************主函数****************** int main() { init(); creat(); printf("\n您输入的顺序表的结点数: \n"); display(); inversion(); printf("\n倒置顺序表的结点数: \n"); display(); } //*************初始化操作分配空间******************

void init() { = (int *) malloc (max_list_size * sizeof(int) ); if (! { printf("顺序表已满"); exit(-1); } = 0; } //*************以下为建表部分****************** void creat(){ int a, b, i; printf("请输入顺序表的结点数: "); scanf("%d", &a); if(a<=0){

一步一步写算法(之循环单向链表)

软件英才网软件行业驰名招聘网站 一步一步写算法(之循环单向链表) 前面的博客中,我们曾经有一篇专门讲到单向链表的内容。那么今天讨论的链表和上次讨论的链表有什么不同呢?重点就在这个"循环"上面。有了循环,意味着我们可以从任何一个链表节点开始工作,可以把root定在任何链表节点上面,可以从任意一个链表节点访问数据,这就是循环的优势。 那么在实现过程中,循环单向链表有什么不同? 1)打印链表数据 1void print_data(const LINK_NODE* pLinkNode) 2{ 3 LINK_NODE* pIndex = NULL; 4if(NULL == pLinkNode) 5return; 6 7 printf("%d\n", pLinkNode->data); 8 pIndex = pLinkNode->next; 9while(pLinkNode != pIndex){ 10 printf("%d\n", pIndex->data); 11 pIndex = pIndex ->next; 12 } 13} 以往,我们发现打印数据的结束都是判断指针是否为NULL,这里因为是循环链表所以发生了变化。原来的条件(NULL != pLinkNode)也修改成了这里的(pLinkNode != pIndex)。同样需要修改的函数还有find函数、count统计函数。 2)插入数据 14STATUS insert_data(LINK_NODE** ppLinkNode, int data) 15{ 16 LINK_NODE* pNode; 17if(NULL == ppLinkNode) 18return FALSE; 19 20if(NULL == *ppLinkNode){ 21 pNode = create_link_node(data); 22 assert(NULL != pNode);

(数据结构C语言版)顺序表和单链表的逆置

} 实验 1-1 顺序表的逆置操作 程序原码 // 创建顺序表,确定元素个数,插入各个元素,逆置列表。 #include #define max_list_size 100 //定义给顺序表分配空间大小 typedef struct{ int *elem; int length; }list_node; //指向顺序表首地址的结构体单元 list_node L; // 这里使用了全局变量,在所有的函数里可以随意修改其值 int list[max_list_size]; void init(); void inversion(); void creat(); void display(); //************* 主函数 ****************** int main() { init(); creat(); printf("\n 您输入的顺序表的结点数 : \n"); display(); inversion(); printf("\n 倒置顺序表的结点数 : \n"); display(); void init() { L.elem = (int *) malloc (max_list_size * sizeof(int) ); if (! L.elem) { printf(" 顺序表已满 "); exit(-1); } L.length = 0; #include #include // 初始化操作 // 倒置部分 // 建表部分 // 显示部分 //* ************ 初始化操作分配空间 ******************

Excel表格的基本操作教程

ExcelExcel表格的基本操作教程系列 也许你已经在Excel中完成过上百张财务报表,也许你已利用Excel函数实现过上千次的复杂运算,也许你认为Excel也不过如此,甚至了无新意。但我们平日里无数次重复的得心应手的使用方法只不过是Excel全部技巧的百分之一。本专题从Excel中的一些鲜为人知的技巧入手,领略一下关于Excel的别样风情。 一、让不同类型数据用不同颜色显示 在工资表中,如果想让大于等于2000元的工资总额以“红色”显示,大于等于1500元的工资总额以“蓝色”显示,低于1000元的工资总额以“棕色”显示,其它以“黑色”显示,我们可以这样设置。 1.打开“工资表”工作簿,选中“工资总额”所在列,执行“格式→条件格式”命令,打开“条件格式”对话框。单击第二个方框右侧的下拉按钮,选中“大于或等于”选项,在后面的方框中输入数值“2000”。单击“格式”按钮,打开“单元格格式”对话框,将“字体”的“颜色”设置为“红

色”。 2.按“添加”按钮,并仿照上面的操作设置好其它条件(大于等于1500,字体设置为“蓝色”;小于1000,字体设置为“棕色”)。 3.设置完成后,按下“确定”按钮。 看看工资表吧,工资总额的数据是不是按你的要求以不同颜色显示出来了。 六、让数据按需排序 如果你要将员工按其所在的部门进行排序,这些部门名称既的有关信息不是按拼音顺序,也不是按笔画顺序,怎么办?可采用自定义序列来排序。 1.执行“格式→选项”命令,打开“选项”对话框,进入“自定义序列”标签中,在“输入序列”下面的方框中输入部门排序的序列(如“机关,车队,一车间,二车间,三车间”等),单击“添加”和“确定”按钮退出。 2.选中“部门”列中任意一个单元格,执行“数据→排序”命令,打开“排序”对话框,单击“选项”按钮,弹出“排序选项”对话框,按其中的下拉按钮,选中刚才自定义

单链表的基本操作

上机实验报告 学院:计算机与信息技术学院 专业:计算机科学与技术(师范)课程名称:数据结构 实验题目:单链表建立及操作 班级序号:师范1班 学号:201421012731 学生姓名:邓雪 指导教师:杨红颖 完成时间:2015年12月25号

一、实验目的: (1)动态地建立单链表; (2)掌握线性表的基本操作:求长度、插入、删除、查找在链式存储结构上的实现; (3)熟悉单链表的应用,明确单链表和顺序表的不同。 二、实验环境: Windows 8.1 Microsoft Visual c++ 6.0 三、实验内容及要求: 建立单链表,实现如下功能: 1、建立单链表并输出(头插法建立单链表); 2、求表长; 3、按位置查找 4、按值查找结点; 5、后插结点; 6、前插结点 7、删除结点; 四、概要设计: 1、通过循环,由键盘输入一串数据。创建并初始化一个单链表。 2、编写实现相关功能函数,完成子函数模块。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作。

五、代码: #include #include typedef char datatype; typedef struct node { datatype data; struct node *next; }linklist; linklist *head,*p; //头插法建立单链表 linklist *Creatlistf() { char ch; linklist *head,*s; head=NULL; ch=getchar(); printf("请输入顺序表元素(数据以$结束):\n"); while(ch!='$') { s=(linklist *)malloc(sizeof(linklist)); s->data=ch; s->next=head; head=s; ch=getchar(); } return head; } //求单链表的长度 void get_length(struct node *head) { struct node *p=head->next; int length=0;

实验1顺序表和链表基本操作(学生)

实验一线性表运算的实现 班级学号姓名 一、实验预备知识 1.复习C中函数的相关内容。 2.复习如何用主函数将多个函数连在一起构成一个C完整程序。 3.复习多文件结构。 二、实验目的 1.掌握线性表的顺序和链式存储结构 2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1.编写初始化并创建线性表和输出线性表的算法。 2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3.编写有序表的插入和删除运算算法。 4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。 5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验内容 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。(开辟的存储空间大小为8) 3.编写顺序表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.向有序表分别插入20和50,插入后表仍然有序。(修改开辟的存储空间大小为15) 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。 3.编写单链表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.分别删除值为25和42的元素,删除后表仍然有序。 五、实验结果 给出程序清单及输入/输出结果 六、总结 1.实验过程中遇到的问题及解决方法 2.收获

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

实验一 要求:①建立双向循环链表 ②实现链表的插入、删除 运行程序点此处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≤表长

链表的基本操作(基于C)

#include #include struct Student { char cName[20]; int iNumber; struct Student* pNext; }; int iCount; struct Student* Create() { struct Student* pHead=NULL; struct Student* pEnd,*pNew; iCount=0; pEnd=pNew=(struct Student*)malloc(sizeof(struct Student)); printf("please first enter Name ,then Number\n"); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); while(pNew->iNumber!=0) { iCount++; if(iCount==1) { pNew->pNext=pHead; pEnd=pNew; pHead=pNew; } else { pNew->pNext=NULL; pEnd->pNext=pNew; pEnd=pNew; } pNew=(struct Student*)malloc(sizeof(struct Student)); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); } free(pNew); return pHead; }

void Print(struct Student* pHead) { struct Student *pTemp; int iIndex=1; printf("----the List has %d members:----\n",iCount); printf("\n"); pTemp=pHead; while(pTemp!=NULL) { printf("the NO%d member is:\n",iIndex); printf("the name is: %s\n",pTemp->cName); printf("the number is: %d\n",pTemp->iNumber); printf("\n"); pTemp=pTemp->pNext; iIndex++; } } struct Student* Insert(struct Student* pHead) { struct Student* pNew; printf("----Insert member at first----\n"); pNew=(struct Student*)malloc(sizeof(struct Student)); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); pNew->pNext=pHead; pHead=pNew; iCount++; return pHead; } void Delete(struct Student* pHead,int iIndex) { int i; struct Student* pTemp; struct Student* pPre; pTemp=pHead; pPre=pTemp; printf("----delete NO%d member----\n",iIndex); for(i=1;i

实验二顺序表及链表

常熟理工学院 《数据结构与算法》实验指导与报告书 __2017_学年第__1__ 学期 专业:物联网工程___________________________ __ 学号:__________________________ ____ 姓名:________________________________ __ 实验名称:顺序表与链表_______________________________ 实验地点:N6-210_____________________________ ____ 指导教师:聂盼红__________________________ ___

计算机科学与工程学院 2017

实验二顺序表与链表 【实验目的】 1、掌握线性表中元素的前驱、后续的概念。 2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。 【实验学时】 4学时 【实验预习】 回答以下问题: 1、顺序表的存储表示 在顺序表中,任一数据元素的存放位置是从起始位置开始、与该数据元素的位序成正比的对应存储位置,借助LOC(ai)=LOC(a1)+(i-1)*1确定,则顺序表是一种随机存取的存储结构。 2、单链表的存储表示 线性链表也称单链表,在每一个结点中只包含一个指针,用于指示该结点的直接后继结点,整个链表通过指针相连,最后一个结点因为没有后继结点,其指针置为空(NULL)。这样,链表中所有数据元素(结点)构成一对一的逻辑关系,实现线性表的链式存储。 【实验容和要求】 1、按照要求完成程序exp2_1.c,实现顺序表的相关操作。以下函数均具有返回值,若操作完成,返回OK,操作失败返回ERROR。函数需返回的其他数据,使用函数参数返回。exp2_1.c部分代码如下: #include #include #define ERROR 0 #define MAXSIZE 100 #define OK 1 typedef int ElemType; /*定义表元素的类型*/ typedef struct slist{ ElemType *list; int listsize; int length;

表的基本操作

教学内容: 4.3 表的基本操作 4.3.1 表的打开和关闭 1、使用菜单打开表 (1)选择“文件”菜单中的“打开”项,在弹出的“打开”对话框中“文件类型”列表框中选择“表(*.dbf)。 (2)选择或输入要打开的表文件名,单击“确定”打开表。 2、用命令打开表 命令格式:USE 表名 [EXCLUSIVE|SHARED] 3、数据表的关闭 如果打开的表是数据库表,则在关闭数据库的同时,该数据库中的所有表也将同时关闭。 如果打开的是自由表,则可用以下命令关闭该表。 命令格式1:USE 命令功能:关闭当前数据表。 命令格式2:CLOSE TABLE 命令功能:关闭所有打开的数据表。 4.3.2 数据的输入 1、使用浏览器输入数据 (1) 打开要输入数据的表。 (2) 选择“显示”菜单中“浏览”或“编辑“项;选择“浏览”,则显示”浏览“窗口;选择“编辑”,则显示“编辑”窗口。 (3)选择“显示”菜单中的“追加方式”,可向表中输入新记录的数据。 2、使用APPEND命令在当前数据表的尾部添加新记录 命令格式:APPEND [BLANK] 3、使用INSERT命令在当前表的任意位置插入一条新记录 命令格式:INSERT [BLANK][BEFORE] 4、备注型和通用型字段数据的输入 (1)备注型字段数据的输入,操作步骤如下: ①打开表的“编辑”或“浏览”窗口。

②把光标移到备注型字段下双击左键或按Ctrl+PageDown或Ctrl+PageUp键,进入备注字段的编辑窗口。 ③在备注字段的编辑窗口,可以输入或修改备注型数据。 (2)通用型数据的输入 通用型字段数据多数是用于存储OLE对象,如,图像、声音、电子表格和文字处理文档等,其长度也是不确定的。给通用型字段输入数据,操作步骤如下: ①打开表的“编辑”或“浏览”窗口。 ②把光标移到通用型字段下双击左键或按Ctrl+PageDown或Ctrl+PageUp键,进入通用字段的编辑窗口。 ③选择“编辑”菜单中“插入对象”,在“插入对象”窗口,选择“由文件创建”按钮,单击“浏览”按钮,选择要插入的文件。 ④单击“确定”按钮,选择的对象被插入到通用字段中。 4.3.3 记录的浏览 1、浏览数据窗口的定制 (1)打开表的“浏览”窗口。 (2)用鼠标拖动某一字段到指定处,可改变字段的显示顺序。 (3)可以使用鼠标调整字段的显示宽度。 (4)在表“浏览”窗口的左下角有一个窗口拆分条,把它拖到一个适当的位置,就可以把“浏览”窗口拆分成两个窗口,将其改变成有“浏览”和“编辑”两种显示方式的窗口。(5)选择“显示”菜单中的“网格线”,可以显示或隐藏浏览窗口中的网格。 2、记录的筛选 (1)打开表的“浏览”窗口。 (2)在“表”菜单中,选择“属性”命令,弹出“工作区属性”对话框。 (3)在“工作区属性”对话框中,可以直接在“数据过滤器”文本框中输入筛选表达式,或者选择“数据过滤器”框后面的“浏览”(…)按钮,在“表达式生成器”对话框中创建一个表达式。 (4)单击“确定”按钮,则在“浏览”窗口中只显示筛选过的记录。 3、字段的筛选 (1)打开表的“浏览”窗口,选择“表”菜单中的“属性”。 (2)在“工作区”属性对话框的“允许访问”框内,选中“字段筛选指定的字段”,单击“字段筛选”按钮,弹出“字段选择器”对话框。 (3)在“字段选择器”对话框中,选择“所有字段”框内需要显示的字段,单击“添加”按钮,将所需字段移入“选字字段”栏中。 (4)在选定了所需字段后,单击“确定”按钮。返回“工作区属性”对话框,单击“确定”按钮,关闭“工作区属性”对知框。 4、使用命令浏览表 命令格式1:BROWSE [范围] [FIELDS 字段表][FOR 条件]

相关文档
最新文档