单链表实验报告

时间:2019-05-15 10:09:12下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《单链表实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单链表实验报告》。

第一篇:单链表实验报告

《数据结构》实验报告二

分校:

学号:

日期:

班级:

姓名:

程序名: L2311.CPP

一、上机实验的问题和要求:

单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:

1.从键盘输入20个整数,产生带表头的单链表,并输入结点值。

2.从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”。

3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。

6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。

7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。8.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:

(包括程序的结构,数据结构,输入/输出设计,符号名说明等)

三、源程序及注释:

四、运行输出结果:

五、调试和运行程序过程中产生的问题及采取的措施:

六、对算法的程序的讨论、分析,改进设想,其它经验教训:

七、对实验方式、组织、设备、题目的意见和建议:

第二篇:北邮数据结构实验报告 单链表

北京邮电大学 数据结构试验报告

实验名称: 实验一

线性表 学生姓名:

级:

班内序号:

号:

期: 2014年1月3日

实验目的

 熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法  学习指针、模板类、异常处理的使用  掌握线性表的操作的实现方法  学习使用线性表解决实际问题的能力 实验内容

2.1题目1 根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。

线性表存储结构(五选一):

1、带头结点的单链表

2、不带头结点的单链表

3、循环链表

4、双链表

5、静态链表

线性表的基本功能:

1、构造:使用头插法、尾插法两种方法

2、插入:要求建立的链表按照关键字从小到大有序

3、删除

4、查找

5、获取链表长度

6、销毁

7、其他:可自行定义

编写测试main()函数测试线性表的正确性。程序分析

3.1 存储结构 单链表的存储结构:

3.2 关键算法分析

一、关键算法 1.头插法

自然语言描述:a.在堆中建立新结点

b.将a[i]写入到新结点的数据域

c.修改新结点的指针域

d.修改头结点的指针域,将新结点加入链表中 代码描述: template LinkList::LinkList(T a[], int n)//头插法建立 {

front = new Node;front->next = NULL;for(int i=n-1;i>=0;i--){ Node* s = new Node;s->data = a[i];

}

} s->next = front->next;front->next = s;时间复杂度:O(n)

2.尾插法

自然语言描述:a.在堆中建立新结点

b.将a[i]写入到新结点的数据域

c.将新结点加入到链表中

d.修改修改尾指针 代码描述: template LinkList::LinkList(T a[], int n)//尾插法建立 {

front = new Node;front->next=NULL;Node * r = front;for(int i=0;i * s = new Node;

}

} s->data = a[i];s->next = r->next;r->next= s;r=s;时间复杂度:O(n)

3.析构函数

自然语言描述:a.新建立一个指针,指向头结点

b.移动a中建立的指针

c.逐个释放指针

代码描述: template LinkList::~LinkList()//析构函数,销毁链表 {

Node * p = front;while(p){ front = p;p = p->next;

} } delete front;4.按位查找函数

自然语言描述: a.初始化工作指针p和计数器j,p指向第一个结点,j=1

b.循环以下操作,直到p为空或者j等于1

b1:p指向下一个结点

b2:j加1

c.若p为空,说明第i个元素不存在,抛出异常

d.否则,说明p指向的元素就是所查找的元素,返回元素地址

代码描述: template Node* LinkList::Get(int i)//按位查找 {

Node * p = front;int j=0;while(p){

if(j

} else break;p = p->next;j++;

} if(!p)throw“查找位置非法”;else

return p;} 时间复杂度:O(n)

5.按值查找函数

自然语言描述:a.初始化工作指针p和计数器j,p指向第一个结点,j=1

b.循环以下操作,找到这个元素或者p指向最后一个结点

b1.判断p指向的结点是不是要查找的值,如果是,返回j;

b2.否则p指向下一个结点,并且j的值加一

c.如果找到最后一个结点还没有找到要查找的元素,返回查找失败信息

代码描述: template int LinkList::Locate(T x)//按值查找 {

Node * p = front->next;int j = 1;while(p){

} return-1;if(p->data == x)return j;else { p = p->next;

j++;} } 时间复杂度:O(n)6.插入函数

自然语言描述: a.在堆中建立新结点

b.将要插入的结点的数据写入到新结点的数据域

c.修改新结点的指针域

d.修改前一个指针的指针域,使其指向新插入的结点的位置

代码描述: template void LinkList::Insert(int i,T x)//插入函数 {

Node * p = Get(i-1);if(p){

} else throw“插入位置非法”;Node * s = new Node;s->data = x;s->next = p->next;p->next = s;} 时间复杂度:O(n)7.按位删除函数

自然语言描述:a.从第一个结点开始,查找要删除的位数i前一个位置i-1的结点

b.设q指向第i个元素

c.将q元素从链表中删除

d.保存q元素的数据

e.释放q元素 代码描述: template T LinkList::Delete(int i)//删除函数 { Node *p = Get(i-1);Node *q = p->next;

T x=q->data;

} p->next = q->next;delete q;return x;

8.遍历打印函数

自然语言描述: a.判断该链表是否为空链表,如果是,报错

b.如果不是空链表,新建立一个temp指针

c.将temp指针指向头结点

d.打印temp指针的data域

e.逐个往后移动temp指针,直到temp指针的指向的指针的next域为空

代码描述: template void LinkList::PrintList()//打印链表 {

} Node * p = front->next;while(p){

} cout<data<<' ';p = p->next;9.获取链表长度函数

自然语言描述: a.判断该链表是否为空链表,如果是,输出长度0

b.如果不是空链表,新建立一个temp指针,初始化整形数n为0

c.将temp指针指向头结点

d.判断temp指针指向的结点的next域是否为空,如果不是,n加一,否则return n

e.使temp指针逐个后移,重复d操作,直到temp指针指向的结点的next域为0,返回n 代码描述: template int LinkList::GetLength()//分析链表长度 {

} Node * p = front;int i=0;while(p){

} return i-1;p = p->next;i++;4 程序运行结果

4.1主函数流程图

4.2程序运行框图

实验心得

1.调试时出现的问题及解决的方法

在编写按值查找函数时,由于没有处理好指针类型的原因,导致指针无法正常返回,屡屡报错。最后意识到c++没有指针强制类型的转换机制,经过细致检查后才改正错误使得程序正常运行。2.心得体会

了解了单链表的基本的操作函数实现,对链式存储结构有了较好的认识 3.下一步的改进

可以增加完善报错机制,增强程序的健壮性

完整源代码

#include using namespace std;

template struct Node {

};

template class LinkList { public:

};

//template //LinkList::LinkList(T a[], int n)//头插法建立 LinkList(){ front = new Node;front->next = NULL;}//无参构造函数 LinkList(T a[],int n);//构造函数 void Insert(int i,T x);//插入函数 T Delete(int i);//删除函数

Node* Get(int i);//查找第几个的元素,返回的是该元素的地址 int Locate(T x);//定位某元素 int GetLength();//分析链表长度 ~LinkList();//析构函数 void PrintList();//打印链表 Node * front;T data;Node * next;private: //{ // // // // // // // // // //}

template LinkList::LinkList(T a[], int n)//尾插法建立 {

}

template LinkList::~LinkList()//析构函数,销毁链表 {

}

template void LinkList::PrintList()//打印链表 { Node * p = front;while(p){

} front = p;p = p->next;delete front;front = new Node;front->next=NULL;Node * r = front;for(int i=0;i

} Node * s = new Node;s->data = a[i];s->next = r->next;r->next= s;r=s;front = new Node;front->next = NULL;for(int i=n-1;i>=0;i--){

} Node* s = new Node;s->data = a[i];s->next = front->next;front->next = s;

} Node * p = front->next;while(p){

} cout<data<<' ';p = p->next;

template Node* LinkList::Get(int i)//按位查找 {

}

template int LinkList::Locate(T x)//按值查找 {

} Node * p = front->next;int j = 1;while(p){

} return-1;if(p->data == x)return j;else

{ } p = p->next;

j++;Node * p = front;int j=0;while(p){

} if(!p)throw“查找位置非法”;else

return p;if(j

} else break;p = p->next;j++;

template void LinkList::Insert(int i,T x)//插入函数 {

}

template T LinkList::Delete(int i)//删除函数 {

}

template int LinkList::GetLength()//分析链表长度 {

}

void main(){ Node * p = front;int i=0;while(p){

} return i-1;p = p->next;i++;Node *p = Get(i-1);Node *q = p->next;p->next = q->next;delete q;return x;Node * p = Get(i-1);if(p){

} else throw“插入位置非法”;Node * s = new Node;s->data = x;s->next = p->next;p->next = s;

T x=q->data;

} int n;cout<<“将要输入的链表长度为:”;cin>>n;int *b=new int[n];cout<<“输入链表中的元素:”;for(int k=0;k>b[k];LinkList a(b,n);a.PrintList();cout<<“链表的长度:”<>i;cout<<“被删除掉的元素是:”<>j;cout<<“要将其插入在哪个位置:”;cin>>i;a.Insert(i,j);cout<<“插入后得到的链表是:”;a.PrintList();cout<<“要查找第几个元素:”;cin>>i;cout<<“要查找的元素为:”<data<>j;cout<<“输入的元素位置在:”<

第三篇:2012《数据结构》上机实验报告 链表

西华大学数计学院学生上机实践报告

西华数学与计算机学院上机实践报告

课程名称:数据结构 指导教师:唐剑梅 上机实践名称:

上机实践编号:1 年级: 2011 姓名:蒋俊 学

***

上机实践成绩:

上机实践日期:2012-11-6

上机实践时间:8:00-9:30

一、实验目的

1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。

2.重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习程序设计方法。

3.掌握栈这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。

4.掌握队列这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。

5.了解和掌握递归程序设计的基本原理和方法。

6.掌握使用 C++面向对象的程序设计技术设计数据结构源程序的方法。

二、实验内容

1.熟悉前面的【程序示例2】,按照约瑟夫问题的方法2,试着不设头结点改写原来的程序,上机调试运行。

2.用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。

要求:(1)通讯录按姓名项的字母顺序排列;

(2)能查找通讯录中某人的信息;

[提示] 用链表来存放这个通讯录,一个人的信息作为一个结点。成链的过程可以这样考虑:先把头结点后面的

西华大学数计学院学生上机实践报告

char name[20];

// 姓名子域

NodeType *next;

// 指针域

};class Jose

//类声明

{ private: NodeType *Head;

public:

Jose(){};

~Jose(){ };

void creat();

void outs();

};void Jose::creat(){ int i=0, n;

NodeType *newp, *pre;

cout<<“n

输入总人数 n=”;cin>>n;

pre=new NodeType;

Head=new NodeType;

pre->num=1;

cout<<“n 编号”<<1<<“的人

姓名=”;

cin>>pre->name;

cout<<“n 密码”<<1<<“的人

密码=”;

cin>>pre->psw;

Head=pre;

Head->next=Head;

for(i=1;i

{ newp=new NodeType;

newp->num=i+1;

cout<<“n 编号”<

姓名=”;cin>>newp->name;

cout<<“n 密码”<

密码=”;

cin>>newp->psw;

newp->next=Head;

pre->next=newp;

pre=newp;

} }

void Jose::outs()

{ int m,i;

NodeType *q=Head, *p;

cout<<“n 输入m值(m>=2)”;cin>>m;

cout<<“n

根据m值,开始报数输出:”<

while(q->next!=q)

西华大学数计学院学生上机实践报告

{ for(i=1;inext;}

cout<<“编号为:”<num<<“ 的人的姓名:”<name<

cout<<“n 编号为:”<num<<“的人的密码:”<psw<

m=q->psw;

p->next=q->next;delete q;

q=p->next;

}

cout<<“编号为:”<num<<“的人的姓名:”<name<

cout<<“n 编号为:”<num<<“的人的密码:”<psw<

delete q;}

int main()

{

Jose h;

h.creat();

h.outs();

return 0;}

西华大学数计学院学生上机实践报告

{ char Add[20];

char name[20];

char tel[20];

};struct NodeType {

ElemType data;

NodeType *next;};class Sqlist

{ private:

NodeType *Head;

public:

Sqlist();

~Sqlist();

void creat();

void Insert(ElemType x);

void Delet(ElemType x);

void PrintOut();

};Sqlist::Sqlist(){

Head=new NodeType;Head->next=NULL;strcpy(Head->data.name,“姓名”);strcpy(Head->data.Add,“地址”);strcpy(Head->data.tel,“电话号码”);} Sqlist::~Sqlist(){

NodeType *p=Head->next;

while(p!=NULL)

{Head->next=p->next;

delete p;

p=Head->next;} } void Sqlist::creat()

//初步建立一个通讯录

{ NodeType*p,*s,*q;ElemType x;

西华大学数计学院学生上机实践报告

int a;q=Head;cout<<“n 输入姓名:”;cin>>x.name;cout<<“n 输入通讯地址:”;cin>>x.Add;cout<<“n 输入电话号码:”;cin>>x.tel;p=new NodeType;p->data=x;Head->next=p;p->next=NULL;cout<<“输入一个数。若为-1,结束输入:”<>a;

while(a!=-1){ cout<<“n 输入姓名:”;cin>>x.name;cout<<“n 输入通讯地址:”;cin>>x.Add;cout<<“n 输入电话号码:=”;cin>>x.tel;s=new NodeType;s->data=x;if(strcmp(s->data.name,p->data.name)>0){ p->next=s;s->next=NULL;

p=s;} else{ s->next=p;q->next=s;} q=q->next;

cout<<“输入一个数。若为-1,结束输入:”<>a;} } void Sqlist::Insert(ElemType x)//插入 { NodeType *p,*q,*s;s=new NodeType;

西华大学数计学院学生上机实践报告

s->data=x;q=Head;p=q->next;while(p!=NULL&&strcmp(p->data.name,x.name)<0){q=p;p=p->next;} s->next=p;q->next=s;} void Sqlist::Delet(ElemType x)//删除 { NodeType *p,*q;q=Head;p=Head->next;while(p!=NULL&&strcmp(p->data.name,x.name)!=0){q=p;p=p->next;} if(p!=NULL){ q->next=p->next;delete p;cout<<“删除结点成功”<

{ NodeType *p;p=Head->next;while(p!=NULL){ cout<

data.name<<“ ”;cout<

data.tel<<“ ”;cout<

data.Add<<“ ”;p=p->next;} cout<

Sqlist as;

cout<<“n

通讯录演示”;

do{

cout<<“nn”;

cout<<“nn

1.初步建立一个通讯录(单链表)

”;

西华大学数计学院学生上机实践报告

cout<<“nn

2.插入新的电话记录 ”;

cout<<“nn

3.删除一个电话记录”;

cout<<“nn

4.结束程序”;

cout<<“n******************************** ”;

cout<<“n

请输入你的选择(1,2,3,4)”;cin>>k;switch(k){ case 1:{ as.creat();as.PrintOut();}break;

case 2:{

cout<<“n 插入的数据 姓名”;cin>>e.name;

cout<<“n 插入的数据 电话号”;cin>>e.tel;

cout<<“n 插入的数据 地址”;cin>>e.Add;

as.Insert(e);as.PrintOut();

}break;

case 3:{

cout<<“n 被删除的姓名= ”;

cin>>e.name;

as.Delet(e);

as.PrintOut();

}break;

default:break;

}

}while(k>=1&&k<4);

cout<<“n

再见!”;

return 0;}

西华大学数计学院学生上机实践报告

西华大学数计学院学生上机实践报告

西华大学数计学院学生上机实践报告

const int MAXSIZE=100;

// 数组的容量 class SqStack

{ private:

ElemType elem[MAXSIZE];

int top;

public:

SqStack();

~SqStack(){};

void SqStack::push(ElemType e);

ElemType SqStack::pop();

void SqStack::PrintOut();

int SqStack::IsEmpty();

void f(ElemType N,ElemType M);};void SqStack::f(ElemType N,ElemType M){ SqStack s;

ElemType e;while(N){

s.push(N%M);

N=N/M;} while(!s.IsEmpty()){

e=s.pop();

if(e>=10)

{

e=e%10;

switch(e)

{

case 1:cout<<“b”<

case 2:cout<<“c”<

case 3:cout<<“d”<

case 4:cout<<“e”<

case 5:cout<<“f”<

default:cout<<“a”<

}

} else

cout<

西华大学数计学院学生上机实践报告

} cout<

{cout<<“栈满溢出”<

return;

}

else{top++;

elem[top]=e;} } ElemType SqStack::pop(){ElemType x;

if(top==0)

{ cout<< “ 栈为空,不能出栈操作”<

else { x=elem[top];

top--;

return x;} } void SqStack::PrintOut()

{int k;

cout<<“n PrintOut Data:n”;

for(k=top;k>=1;k--)cout<

cout<

else return 0;} void main(){ ElemType a,m;cout<<“请输入一个正整数:”<>a;cout<<“请输入要转换的进制:”<>m;SqStack as;as.f(a,m);}

西华大学数计学院学生上机实践报告

五、总结

通过本次实验,我熟悉了链表的操作,了解了线性表在现实生活中的运用,认识了顺序存储和链式存储这两种结构。本次上机实践基本完成了实验内容,但完成的不是很好,以后需要更加努力地掌握基本的知识。实验内容对于队列的运用没有涉及,希望以后有所涉及。

西华大学数计学院学生上机实践报告

第四篇:实验四 单链表及其应用(参考程序)

实验四 单链表的建立

一、实验目的

1.掌握线性表的链式存储结构——单链表的定义及C语言实现。2.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容

1.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据分别按尾插入法和头插法来建立相应单链表。【知识要点】

为了便于实现各种运算,通常在单链表的第一个结点前增设一个附加结点,称为头结点,它的结构与表结点相同,其数据域可不存储信息,也可存储表长等附加信息,具体如下图。

【实验提示】

单链表的结点结构除数据域外,还含有一个指针域。用C语言描述结点结构如下:

typedef int datatype;

/* 线性表中存放整型元素 */ typedef struct LNode

/ * 结点类型定义 * /

{

datatype data;

/ * 数据域 * /

struct node *next;

/ * 指针域 * / }Linklist;

/* Linklist为单链表类型*/

注意结点的建立方法及构造新结点时指针的变化。构造一个结点需用到C语言的标准函数malloc(),如给指针变量p分配一个结点的地址:

p=(strcut LNode *)malloc(sizeof(Linklist));该语句的功能是申请分配一个类型为Linklist的结点的地址空间,并将首地址存入指针变量p中(或p=new(struct LNode);即生成新结点)。当结点不需要时可以用标准函数free(p)释放结点存储空间,这时p为空值(NULL)。【程序提示】

#include typedef struct LNode{

//补充实现表节点类型的定义; } Linklist;

Linklist * creatlist(){ int x;Linklist *head, *p;// head为单链表的头指针,p指向新建的结点

//补充实现单链表的建立;

return(head);

// 函数返回链表头指针head }

void output(Linklist *HeadL){ if(HeadL->next==NULL)printf(“空链表!n”);else { printf(“链表为:n”);Linklist *P;P=HeadL->next;while(P!=NULL){

printf(“%d->”,P->data);P=P->next;} printf(“n”);}

}

void main(void){ Linklist *List;List=creatlist();output(List);} 【参考程序】

1、尾插法

#include typedef struct LNode{ int data;struct LNode *next;} Linklist;

Linklist * creatlist(){ int x;

Linklist *head, *p,*r;/* head为头指针 */

head=new(struct LNode);

head->data=0;

/* 表头结点数据域赋值 */

r=head;

/* 尾指针的初值为头结点head */

printf(“请随机输入互不相同的正整数以0作为结束符:n”);

scanf(“%d”, &x);

/* 读入第一个结点的值 */

while(x!=0)

/* 输入数据,以0为结束符 */ { p=new(struct LNode);/* 生成新结点 */

p->data=x;

/* 给新结点的数据域赋值 */

r->next=p;

/* 新结点插入到表尾*rear之后 */

r=p;

/* 将尾指针rear指向新的尾结点 */

head->data++;

/* 链表长度计数 */

scanf(“%d”, &x);

/* 输入下一个结点的数据 */

}

r->next=NULL;

/* 将链表最后一个结点rear指针域置空 */

return(head);/* 函数返回链表头指针head */ }

void output(Linklist *HeadL){

if(HeadL->next==NULL)printf(“空链表!n”);else {

printf(“链表为:n”);

Linklist *P;

P=HeadL->next;

while(P!=NULL)

{

printf(“%d->”,P->data);

P=P->next;

}

printf(“n”);}

} void main(void){

Linklist *List;List=creatlist();output(List);}

2、头插法

#include typedef struct LNode{ int data;struct LNode *next;} Linklist;

Linklist * creatlist(){ int x;

Linklist *head, *p;/* head为头指针 */

head=new(struct LNode);

head->data=0;

/* 表头结点数据域赋值 */

head->next=NULL;

printf(“n请随机输入一组正整数以0结束输入:n”);

scanf(“%d”,&x);

/* 输入第一个结点数据值 */

while(x!=0)

/* 输入数据,以0为结束符 */

{ p=new(struct LNode);/* 生成新结点 */

p->data=x;/* 给新结点的数据域赋值 */

p->next=head->next;

/* 将新结点插入表头结点head之后 */

head->next=p;

head->data++;

/* 链表长度计数 */

scanf(“%d”,&x);

/* 输入下一个结点的值 */

}

return(head);/* 函数返回链表头指针head */ }

void output(Linklist *HeadL){

} void main(void){

Linklist *List;List=creatlist();output(List);}

方法二 void main(void){

} 2.在第一题的基础上,增加单链表的查找,插入,删除子程序。#include #include“stdlib.h”

typedef struct LNode{ int data;struct LNode *next;Linklist *head,*p;head=creatlist();printf(“output the list:n”);p=head->next;while(p){ } printf(“%d ”,p->data);p=p->next;} Linklist;

Linklist * creatlist(){ int x;

Linklist *head, *p;

/* head为头指针 */

head=new(struct LNode);

head->data=0;

/* 表头结点数据域赋值 */

head->next=NULL;

cout<<“n请随机输入一组正整数以0结束输入:n”;

cin>>x;/* 输入第一个结点数据值 */

while(x!=0)

/* 输入数据,以0为结束符 */

{ p=new(struct LNode);/* 生成新结点 */

p->data=x;/* 给新结点的数据域赋值 */

p->next=head->next;

/* 将新结点插入表头结点head之后 */

head->next=p;

head->data++;

/* 链表长度计数 */

cin>>x;

}

return(head);} void output(Linklist *HeadL){

if(HeadL->next==NULL)cout<<“空链表!n”;else {

cout<<“链表为:n”;

Linklist *P;

P=HeadL->next;

while(P!=NULL)

{

cout<

data<<“->”;/* 函数返回链表头指针head */ /* 输入下一个结点的值 */

P=P->next;

}

cout<<“n”;} } Linklist *no_search(Linklist *head, int i){

Linklist *p;int j;

p=head->next;

j=1;

/* 从首结点开始扫描 */

while((p!=NULL)&&(j

{ p=p->next;

/* 扫描下一个结点 */

j++;

}

if(i==j)return(p);

else return(NULL);

/* 若找不到,则返回空指针 */ } Linklist *data_insert(Linklist *head, Linklist *p, int x){

Linklist *s;

s =new(struct LNode);/* 建立新结点 */

s->data=x;

/* 将x值赋给s→data */

/* 统计已扫描结点的个数 */

s->next=p->next;/* 新结点s后继指向原p结点后继 */

p->next=s;

/* p结点的后继指向新结点s */

return(head);

/* 返回带头结点的单链表头指针*/ } Linklist *key_delete(Linklist *head, int x){

Linklist *p, *q;

/* p是被删除结点,q是p的前驱结点 */

p=head;

while((p!=NULL)&&(p->data!=x))

{

q=p;

p=p->next;

}

if(p!=NULL)

{

q->next=p->next;

/* 修改p前驱结点q指针域 */

/* 释放结点空间 */

/* 若该结点存在,则删除之 */

free(p);

return(head);

}

/* 函数返回链表头指针*/

else

{

cout<<“要删的结点不存在,请重输数据!n”;

return(NULL);

} }

void main(void){

Linklist *List,*chazhao;List=creatlist();output(List);chazhao=no_search(List,2);//查找第二个节点,并输出数据域信息 cout<<“n查找第二个节点,数据域信息为:n”;cout<data;List=data_insert(List,chazhao,50);//在第二个节点后插入数据为50的节点 cout<<“n在第二个节点后插入数据为50的节点:n”;

output(List);List=key_delete(List,50);//删除数据为50的节点 cout<<“n删除数据为50的节点:n”;

output(List);}

第五篇:WEB程序设计实验报告-15单

实验

四、ASP.NET编程

实验序号:4 实验名称:ASP.NET编程 适用专业:计算机科学与技术/软件工程 学时数: 8学时

一、实验目的

1、熟悉ASP.NET服务器控件的使用。

2、学会使用ASP.NET服务器控件设计Web页面。

3、学会使用ASP.NET对象。

二、实验设备

装有WEB程序设计相关软件。

1、使用ASP.NET控件,如TextBox、Label、Button等,并结合CSS、Javascript,实现登录页面的实现。要求点击登录按钮时,弹出提示:您输入的用户名是:**,密码是:**,*为显示输入的用户名和密码,同时将用户名和密码写入session,并跳转到下面第2题页面。

<%@ Page Language=“C#” AutoEventWireup=“true” CodeBehind=“login.aspx.cs”

Inherits=“WebApplication2.login” %>

style=“margin-bottom: 0px” Text=“用®?户¡ì名?”>

style=“margin-left: 9px”>





style=“margin-left: 39px”>

三、实验步骤



下载单链表实验报告word格式文档
下载单链表实验报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    职工信息管理系统 单链表实现 C语言源程序(范文)

    #include #include #include int saveflag=0; /* 单链表内容有无发生改变,是否需要存盘的标志变量 */ struct employee { }; typedef struct Node { void InitList(LinkLi......

    C语言课程设计 职工信息管理系统 单链表实现程序源代码

    //C语言课程设计 职工信息管理系统—单链表实现 #include "stdio.h" #include "stdlib.h" #include "string.h" int saveflag=0; /*是否需要存盘的标志变量*/ struct empl......

    学生管理系统学生链表

    #include #include #include typedef struct student { int num; char name[10]; char passwd[6]; int age; int class; int math; int clan; int chinese; int m......

    单臂路由实验报告[小编整理]

    实 验 报 告 实验名称 课程名称 一.实验目的 1、进一步理解路由器配置的基本原理; 2、熟练掌握PacketTracer软件的安装和配置方法; 3、掌握vlan间路由单臂路由的配置。 4、掌......

    单管共射放大电路仿真--实验报告

    实班级:机电-156 姓名:李学东 验报 告 单管共射放大电路 实验目的 (1) 掌握单管放大电路的静态工作点和电压放大倍数的测量方法。 (2) 了解电路中元件的参数改变对静态工作点......

    斐波那契数列递归和迭代&循环链表队列初始化实验报告

    第一次实验实验报告 班级:2009211307 姓名:吕博文 学号:09211297 分工情况:个人一组 完成日期:11月5日 斐波那契数列递归和迭代算法 一、问题描述 分别写出下列函数的递归算法和......

    C语言链表的概念

    C语言链表的概念 在*中采用了动态分配的办法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少......

    双向循环链表的创建

    #include #include #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int status; //双向循环链表的存储结构 typedef struct DuLNode { int data; int Length; s......