⑴ 数据结构实验(C语言): 顺序表实验
Status Initlist_Sq(SqList &L) /*初始化顺序表*/
{ L=(SqList *)malloc(sizeof(SqList));
l->length=0;
}
void Destroylist(SqList &L) /*销毁顺序表*/
{
free(L);
}
void Clearlist_Sq(SqList &L) /*清空顺序表*/
{ 同上}
Status Listempty_Sq(SqList L) /*测试顺序表是否为空*/
{
return(L->length==0);
}
Status ListInsert_Sq(SqList &L, int i,ElemType e) /*在第i个位置上插入一个元素*/
{ int j;
if(i<1||i>L->length+1)
return 0;
i--;
for(j=L->length;j>i;j--)
L->elem[j]=l->elem[j-1];
L->elem[i]=e;
L->length++;
return 1;
}
int LocateElem_Sq(SqList L,ElemType e) /*返回元素e在顺序表中的位置*/
{ int i=0;
while(i<L->length&&L->elem[i]!e) i++;
if(i>=L-length)
return 0;
else
return i+1;
}
Status ListDelete_Sq(SqList &L, int i, int &e) /*删除第i个位置上的元素*/
{ int j;
if(i<1||i>L->length)
return 0;
i--;
e=L->elem[i];
for(j=i;j<L->length-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return 1;
}
好好看看
⑵ 数据结构实验:线性表的顺序表示和链式表示及插入、删除、查找运算
这是我的第一次上机实验课的内容来呢!
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
struct list //结点类型
{ int data;
struct list *next;
};
struct list *head;//声明结点指针
int static length;//声明表长变量
struct list *creat_n()//创建有n个元素的链表
{
struct list *q,*p,*head=NULL;
printf("\n输入你所要创建的结点数: ");
scanf("%d",&length);
head=p=(list*)malloc(sizeof(list)); //创建一个新结点并用头指针指向它
printf("输入该结点的值: ");
scanf("%d", &p->data);
p->next=NULL;
for(int i=length-1;i>=1;i--)
{
q=p;
p=(list*)malloc(sizeof(list)); //创建新结点
printf("输入该结点的值: ");
scanf("%d", &p->data);
q->next=p;
}
printf("输入完毕\n\n");
p->next=NULL;
return head;
}
struct list * output()//输出表长与结点值函数
{
struct list *p;
p=head;
printf("\n当前链表中存有的元素:\n");
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
printf("当前的表长是: %d\n\n",length);//输出当前表长
return head;
}
void insert()//插入结点函数
{
struct list *k,*p,*q;
int x;
printf("请输入你要在哪个结点值之前插入新结点: ");
scanf("%d",&x);
k=(list*)malloc(sizeof(list));//创建新结点
printf("请输入新结点的值: ");
scanf("%d",&k->data);
k->next=NULL;
if(head==NULL)//若链表为空,则直接入链表
{
head=k;
length=length+1;
printf("插入成功\n\n");
}
else if(head->data==x)//在第一个结点前插入新结点
{
k->next=head;
head=k;
printf("插入成功\n\n");
length=length+1;
}
else
{
q=head;
p=head->next;
while((p != NULL) && (p->data != x))//找出值为X的结点的位置
{
q = p;
p = p->next;
}
if (p == NULL)
{
q->next=k;//在链表末插入新结点
printf("插入成功\n");
length=length+1;
}
else if(p->data == x)//在要求的X结点前插入新结点
{
k->next=p;
q->next=k;
printf("插入成功\n\n");
length=length+1;
}
}
output();
}
int delet()//删除结点函数
{
struct list *q,*p;
int x,y;
printf("请输入你所要删除的结点值: ");
scanf("%d",&x);
if(head==NULL)//表空
{
printf("表空\n");
return 0 ;
}
else if(x==head->data)//第一个结点为删除的结点
{
q=head;
head=head->next;
y=q->data;
free(q);
printf("删除成功\n\n");
length=length-1;
output();
return(y);
}
else
{
q=head;
p=head->next;
while((p != NULL) && (p->data != x))//找出值为X的结点
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("没有删除对象\n");
}
if(x==p->data)//删除值为X的结点
{
q->next=p->next;
y=p->data;
free(p);
printf("删除成功\n\n");
length=length-1;
output();
return (y);
}
else
{
printf("表中没有指定的结点\n");
output();
return 0;
}
}
return 0;
}
void find()
{
struct list *p;
int k,x,i=1;
char y,n;
LOOP:
p=head;
printf("请输入你要查找的结点值: ");
scanf("%d",&x);
while(p->data!=x)
{
p=p->next;
i++;
}
printf("你所查找的结点是表中第 %d 个结点!\n\n",i);
printf("是否要继续查找,请输入y/n\n\n");
k=getch();
if(k=='y')
{
i=1;
goto LOOP;
}
else
return;
}
void main()
{
printf("计Y062 200502001052 李抱和\n\n");
int a;
LOOP:
printf(" *****************\n");
printf(" ** 1 创建链表 **\n");
printf(" ** 2 链表输出 **\n");
printf(" ** 3 插入结点 **\n");
printf(" ** 4 删除结点 **\n");
printf(" ** 5 查找结点 **\n");
printf(" *****************\n");
printf("\n请选择: ");
scanf("%d",&a);
switch(a)
{
case 1 :
head=creat_n();
break;
case 2 :
output();
break;
case 3 :
insert();
break;
case 4 :
delet();
break;
case 5 :
find();
break;
}
goto LOOP;
}
⑶ 数据结构试验怎么做
用TURBO C 2.0 或者 WIN-TC 或者visual c++都行。
看看这个也许你会明白的更多一些。
实验一 多项式相加
一、实验目的
熟悉链表的使用。
掌握如何使用C语言实现链表的说明、创建以及结点的插入和删除等操作。
二、实验要求
熟悉C语言编程。
三、实验内容
对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。
四、实验步骤
1. 用链表作一元多项式的数据结构,用C语言对链表作说明
2. 生成输入一元多项式的函数
3. 输入一元多项式A(x)和B(x)
4. 以一元多项式A(x)为和多项式,将B(x)多项式中系数加入到A(x)中去
实验二 后缀表达式计算
一、实验目的
熟悉栈的使用。
掌握如何使用C语言实现栈的说明、创建以及进栈和出栈等操作。
二、实验要求
熟悉C语言编程。
三、实验内容
先将中缀表达式(就是我们通常所见的)转换为后缀表达式,比如 a+b*c+d 要变成 abc*+d+;转换的方法用栈来实现,涉及到运算符的优先级;然后用另一个栈来对后缀表达式计算结果
四、实验步骤
1.读入字母/数字--〉字母/数字进栈
2.读入运算符--〉退出两个字母/数字,用运算符计算结果,并将结果进栈
3.栈能刚好退完,则最后的即为结果。否则表明表达式有误
实验三 Kmp算法
一、实验目的
熟悉字符串的使用。
掌握如何kmp算法实验字符串的模式匹配。
二、实验要求
熟悉C语言编程。
三、实验内容
求出子串(模式串)的next,利用kmp算法实验模式与主串的匹配算法。
四、实验步骤
1.生成模式串的next函数
2.从第1个字符开始,进行模式串与主串的比较,
3.如果出现失配,将模式串的第next[j]位置开始,继续与主串进行比较。
实验四 Huffman 编码
一、实验目的
熟悉Huffman编码方法。
了解并弄懂Huffman编码实现信息的无损压缩原理。
二、实验要求
熟悉C语言编程。
三、实验内容
1.根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F=,其中每棵二叉树Ti中只有一个带树为Ti的根结点
2.在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置其根结点的权值为其左右子树权值之和
3.在F中删除这两棵树,同时将新得到的二叉树加入F中
4.重复2, 3,直到F只含一棵树为止
四、实验步骤
1.用C语言实现二叉树的说明
2.输入n个权值,并生成n个二叉树
3.对n个二叉树逐步生成Huffman树
4.对Huffman树的每个叶子结点生成编码
实验五 关键路径
一、实验目的
熟悉关键路径的实现方法。
了解AOE-网以及关键路径在工程实践中的应用。
二、实验要求
熟悉C语言编程。
三、实验内容
根据输入的弧,生成AOE-网。从始点开始,找出到终点的多条路径,求这些路径上的关键活动。由关键活动组成的从始点到终点的路径,即为关键路径。
四、实验步骤
1.输入e条弧,生成AOE-网的存储结构。
2.从始点v0出发,令ve[0]=0,按拓扑有序求ve[j]
3.从终点vn-1出发,令vl[n-1]=ve[n-1],按逆拓扑有序求vl[i]
4.根据各顶点的ve和vl值,求每条弧(活动)ai的最早开始时间e[ai]和最迟开始时间l[ai]
5.如果e[ai]=l[ai],则ai为关键活动
实验六 最短路经
一、实验目的
熟悉最短路径的实现方法。
了解AOE-网以及最短路径在求解实际问题中的应用。
二、实验要求
熟悉C语言编程。
三、实验内容
从始点v0开始,逐步求v0到其它可达的各顶点的最短路径,直到所有顶点计算完成为止。
四、实验步骤
1.输入e条弧,生成AOE-网的存储结构。
2.初始化: S ← ;
dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n为图中顶点个数
3.求出最短路径的长度:
dist[k] ← min , i V- S ;
S ← S U ;
4.修改从v0到V-S集合中各顶点的最短路径:
dist[i] ← min,
对于每一个 i 属于 V- S ;
5.判断:若 S = V, 则算法结束,否则转 2。
实验七 二叉排序树
一、实验目的
熟悉二叉排序树的使用。
掌握如何使用C语言实现二叉树的说明、创建以及二叉排序树的生成等操作。
二、实验要求
熟悉C语言编程。
三、实验内容
给定一个记录关键字的值,与二叉排序树的根结点值比较,如果小于根结点的值,则向左子树查找;如果大于根结点的值,则向右子树查找。如果查找到叶子结点leaf,仍没有找到记录,则:如果关键字的值小于leaf的值,则插入该leaf结点的左边,做leaf的左孩子,否则做leaf的右孩子。
四、实验步骤
1.用C语言实现二叉树的说明
2.直接将输入的值作为根结点的值
3.与根结点比较,小于则放到左子树上,大于则放到右子树上。
实验八 希尔排序
一、实验目的
熟悉希尔排序的使用。
掌握如何使用C语言实现若干记录的排序。
二、实验要求
熟悉C语言编程。
三、实验内容
先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
四、实验步骤
1.输入待排序记录
2.首先取一个整数 gap < n(待排序记录数) 作为间隔, 将全部记录分为 gap 个子序列, 所有距离为 gap 的记录放在同一个子序列中
3.在每一个子序列中分别施行直接插入排序。
4.然后缩小间隔 gap, 例如取 gap = gap/2
5.重复上述的子序列划分和排序工作,直到最后取gap = 1, 将所有记录放在同一个序列中排序为止。
实验九 快速排序
一、实验目的
熟悉快速排序的使用。
掌握如何使用C语言实现若干记录的排序。
二、实验要求
熟悉C语言编程。
三、实验内容
通过一趟将待排记录分割成独立的两个部分,其中一部分记录的关键字均比另一部分记录的关键字小。再对两个部分分别进行快速排序。
四、实验步骤
1.输入待排序的记录,并选择第一个记录作为pivotkey记录
2.从high指向的记录开始,向前找到第一个关键字的值小于Pivotkey的记录,将其放到low指向的位置,low+1
3.从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,将其放到high指向的位置,high-1
4.重复2,3,直到low=high,将枢轴记录放在low(high)指向的位置
5.重复2,3,4,直到整个记录有序为止
实验十 堆排序
一、实验目的
熟悉堆排序的使用。
掌握如何使用C语言实现若干记录的排序。
二、实验要求
熟悉C语言编程。
三、实验内容
首先将一个无序序列建成一个堆;然后输出堆顶元素;在输出堆顶元素之后,调整剩余的元素成为一个新堆。
四、实验步骤
1.输入记录,按顺序创建一个完全二叉树
2.根据筛选算法,从最后一个结点开始,一直到根结点,逐步筛选,建造初始堆。
3.输出堆顶记录,将最后一个结点放到堆顶,并做筛选,重新建造一个堆
4.直到所有记录输出为止
⑷ 求数据结构试验 线性表的顺序存储结构
#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100//线性表存储空间的初始增量
#define LISTINCREMENT 10 // ?
typedef struct{
int * elem;// 存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;
SqList L;
int InitList_Sq(SqList & L){
//构造一个新的线性表。
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);//存储容量失败
L.length=0; //空表长度为0
L.listsize=LIST_INIT_SIZE;//存储初始容量
return OK;
}//InitList_Sq
int LIstInsert_Sq(SqList & L,int i,int e){
//在顺序线性表L中第i位置之前插入新的元素e
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
int * q=&(L.elem[i-1]);
for(int * p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList&L,int i,int &e)
{
if((i<1)||(i>L.length))return ERROR;
int *p=&(L.elem[i-1]);
e=*p;
int *q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}
void main()
{
SqList L;
int i,n;
int e;
cout<<"输入顺序表的个数:"<<endl;
cin>>n;
int *p=(int *)malloc(n*sizeof(int));
InitList_Sq(L);
cout<<"输入线性表"<<n<<"个元素的值"<<endl;
for(i=0;i<n;i++)
{
cin>>p[i];
L.elem[i]=p[i];
}
cout<<endl;
L.length=i;
cout<<endl;
cout<<"输入要插入元素的值"<<endl;
cin>>e;
cout<<endl;
cout<<"输入要插入的位置"<<endl;
cin>>i;
LIstInsert_Sq( L, i, e);
for(i=0;i<n+1;i++)
cout<<L.elem[i];
cout<<endl;
cout<<"输入要删除的位置"<<endl;
cin>>i;
ListDelete_Sq(L,i,e)
;for(i=0;i<n;i++)
cout<<L.elem[i];
free(p);
⑸ 数据结构实验的实验报告怎么写
数据库课程设计
“数据库课程设计”是数据库系统及应用课程的后续实验课,是进一步巩固学生的数据库知识,加强学生的实际动手能力和提高学生综合素质。
一、 课程设计目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的:
1. 加深对数据库原理、程序设计语言的理论知识的理解和应用水平;
2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;
3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;
4. 为毕业设计和以后工作打下必要基础。
二、课程设计要求
运用数据库原理的基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
1. 用E-R图设计选定题目的信息模型;
2. 设计相应的关系模型,确定数据库结构;
3. 分析关系模式各属于第几范式,阐明理由;
4. 设计应用系统的系统结构图,确定系统功能;
5. 通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;
6. 为参照关系设计插入、删除、修改触发器;
7. 实现应用程序设计、编程、优化功能;
8. 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求;
9. 分析遇到的问题,总结并写出课程设计报告;
10. 自我评价
三、实验环境
开发环境VC++、C#、ASP或JAVA;ODBC/JDBC;数据库SQL Server
四、上机实现内容
1. 创建数据库的结构
2. 创建各基本表的结构
3. 编制系统各功能模块,完成数据的管理(增、删、改)及统计查询。对于程序运行界面不做考核的重点。
五、课程设计考核
1.对学生到实验室的情况进行不定时统计;
2.出勤率+课程设计报告+课程设计所开发的应用系统+其他(上机抽查和提问)=综合评定成绩。
3.课程设计结束时请将下列资料上交:
(1) 课程设计报告;
(2) 所开发的应用系统的源程序、安装和使用说明;
(3) 将(1)(2)中的资料压缩成一个压缩包,压缩包文件的命名规则:班级+学号(末2位)+姓名(例如:计科090101王鹏晓);
(4) 班长将本班每人的(3)中的压缩包刻录成光盘连同打印的课程设计报告收齐,交给任课教师。
附录﹑课程设计题目
题目1:课程设计选题管理系统(1,24)
包括三大模块:
课程设计题目维护与查询:题目的添加、修改和删除;按题目类型、名称和关键字查询以及已选与未选题目的查询;
学生信息维护与查询;
学生选题维护与管理:学生选题及查询;
具体功能细化:
前台学生选题:学生上网登录系统进行选题;
前台教师出题:
教师添加、修改和删除题目;
教师确认学生的选题;
后台管理出题和选题
添加用户及权限
题目2:书店管理系统(23)
包括四大模块:
售书(图书销售管理及销售统计,查询)
进书(通过书目,向发行商下定单订购图书)
库存(图书库存,统计)
相关查询
题目3:图书馆管理系统(11)
包括四大模块:
图书的查询
借书
还书
图书的预约
题目4:库存管理系统(8)
包括四大模块:
商品目录建立
商品入库管理
商品出库管理
商品库存查询
题目5:工资管理系统(1 人)41
包括四大模块:
系统数据初始化
员工基本信息数据的输入、修改、删除;
员工个人信息及工资表的查询;
员工工资的计算;
参考数据如下:
员工基本状况:包括员工号、员工姓名、性别、所在部门、工资级别、工资等级等。
工资级别和工资金额:包括工资等级、工资额。
企业部门及工作岗位信息:包括部门名称、工作岗位名称、工作岗位工资等。
工龄和工资金额:包括工龄及对应工资额。
公司福利表:包括福利名称、福利值。
工资信息:包括员工号、员工姓名、员工基础工资、员工岗位工资、员工工龄工资、公司福利、员工实得工资。
题目6:酒店客房管理系统 (1 人)14,26
包括四大模块:
前台操作:包括开房登记、退房结账和房状态查看
预订管理:包括预订房间、预订入住和解除预订
信息查询:包括在住客人列表、预订客人列表和历史客人列表
报表统计:包括开房记录统计、退房结账和预订房间统计
员工基本信息数据的输入、修改、删除;
参考数据如下:
住店管理:客人姓名、证件号码、房号、入住时期、预计离开日期、结账离开日期、应付金额
客人信息:姓名、性别、证件类型、证件号码、联系电话
房间信息:房号、房类型、价格、押金、房状态 预订房间
客人姓名、性别、房类型、房号、价格、证件类型、证件号码、联系电话、入住日期、预计离开日期、历史信息
题目7:旅行社管理信息系统(1 人)3
包括如下模块:
旅游团队、团队团员及旅游路线相关信息的输入
旅游团队、团队团员及旅游路线相关信息的维护(修改、浏览、删除和撤销)
旅游团队管理信息的查询(如按团队编号)
团队团员基本情况的查询(可选多种方式)
旅游路线相关信息的查询(如按线路编号)
旅游路线排行榜发布。
数据备份,更改密码。
参考数据如下:
团员信息表(路线编号,团队编号,团员编号,姓名,性别,电话,通信地址,身份证号码, 团费交否,备注)
线路信息表(路线名称,团费,简介,图形,路线编号)
团队信息表(团队编号,路线编号,团员人数,出发日期,返程日期)
旅游团队信息表(团队编号,团队负责人,团员人数,建团时间,是否出发,团费,盈亏)
密码信息(操作员,密码)
题目8:报刊订阅管理系统 (1 人)25,35
包括如下模块:
登录功能:登录统为身份验证登录。分为管理员登录和一般用户登录。分别通过不 同的用户名和密码进入报刊订阅管理界面,新的用户需要注册。
录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦 提交就存入到后台数据库中;普通用户自行注册进行可以修改个人信息。
订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不 可订阅报刊,必须以用户身份订阅报刊。
查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门 分类查询。查询出的信息显示在界面上,并且可以预览和打印出结果。
统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订 阅信息进行统计;普通用户可以统计出自己的订阅情况,并且可以预览和打印出结果。
系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢 复,数据库备份后,如果出了什么意外可以恢复数据库到当时备份的状态,这提高了系统和 数据的安全性,有利于系统的维护
参考数据如下:
管理员表(Adminuser) :管理员名、密码。
部门表(Department) :部门号,部门名。
用户表(Users) :用户账号、密码、真实姓名、身 份证号、联系电话,联系地址,部门号(和部门表有关)等。
报刊类别表(NewspaperClass) :分类编号、 分类名称。
报刊信息表(Newspaper) :报刊代号、报刊名称、出版 报社、出版周期、季度报价、内容介绍、分类编号(和报刊类别表有关)等。
订单表(Order) :订单编号、用户编号、报刊代号、订阅份数、订阅月数等。
题目9:计算机等级考试教务管理系统(2 人)32
包括四大模块:
用户设置:对考点代码,考点名称进行设置,设置用户与密码;系统复位:即清除上一次考试数据(在之前存入历史)
报名管理: 报各库录入(姓名不能不空,之间不能有空格) 增加、删除、修改、浏览
准考证管理:准考证生成规则:xxx+yy+zz+kk,其中 XXX 为考点代码;YY 为语言代码,XX 为考场号,KK 为座位号 同一级别、语言应根据报名初始库信息按随机数生成准考证,同一考点最多可有 99*30=2970 名考生;如已生成准考证号,再重新生成准考证号,应该给予提示。 准考证打印
考务管理:考生信息查询、浏览、打印
成绩管理:成绩数据录入、接收 成绩合成(总成绩=笔试成绩*0.6+上机成绩*0.4),按大于或等于 60 合格
参考数据如下:
初始报名表(准考证号(为空) ,报名号(主键) ,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)
含准考证号的报名表(准考证号(为主键) ,报名号,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)
成绩表(准考证号,笔试成绩,上机成绩,总成绩) 级别语言代码表(级别语言代码,级别+语言)
用户信息表(考点代码,考点名称,用户名,密码)
题目10:人事管理系统(1 人)21
包括四大模块:
登录管理:包括操作员管理,口令设置,权限管理
人员管理:包括人事数据维护、人事信息查询和人事信息统计
工资管理
部门管理:包括部门表,职称表和年份表
查询及报表打印
参考数据如下:
人事表(编号,姓名,性别,出生日期,工作日期,部门代码,职称,婚否,简历,相片)
工资表(基本工资,岗位津贴,奖励,应发工资,水电,保险,实发工资)
部门表(代码,部门名称)
职称表(职称代码,职称名称)
年份表(年份代码,年份名称)
操作员表(操作员代码,操作员姓名,口令,部门,电话)
系统日志表(操作员代号,操作员姓名,登录时间,离开时间)
题目11:商品销售管理系统(1 人)19
包括四大模块:
用户登录
基本信息管理:包括销售情况、商品信息、库存表、员工表等信息的录入、浏览、修改、撤销、删除和查询等
商品销售管理:包括商品售出、退回和入库
盘点:包括库存盘点、当日销售盘点
参考数据如下:
商品信息表(商品编号,商品名称,品牌,型号,销售单价) 商品编号=类别代码(1 位)+品名代码(1 位)+品牌代码(2 位)+型号代码(2 位)
销售情况表(成交编号,商品编号,销售数量,总金额,销售日期,员工编号)
库存表(商品编号,供货商编号,进货日期,进货价,库存数量)
员工表(员工编号,员工姓名,性别,基本工资,职务,密码)
供货商表(供货商编号,供货商名称,所在地,联系电话)
员工资料表(员工编号,员工姓名,是否党员,简历,照片)
题目12:学生成绩管理系统(1 人)29
包括四大模块:
基本数据管理:包括院系管理,专业管理(设置院系下面的专业),班级管理(设置专业下面的班级),课程管理(设置相应专业下面的课程)
学生信息管理:包括基本信息录入、基本信息修改
学生成绩管理:包括学生成绩录入、学生成绩修改
信息查询:包括基本信息查询、成绩信息查询、学校人数统计
系统管理:用户管理、数据备份和系统帮助
参考数据如下:
院系信息(院系代码,院系名称)
院系专业信息(班级、院系代码,专业)
学生基本信息(班号,学号,姓名,性别,出生年月,籍贯,政治面貌,身份证号,入学年月,家庭地址,邮政编码,图片信息,备注)
学生成绩表(学号,课号,成绩,备注)
课程表(课号,课程名称,学期,备注)
班表(班号,班级名称)
用户信息表(用户名,密码,用户标识)
题目13:火车售票管理系统(4 人)36
包括四大模块:
售票管理
订票管理
信息查询
系统维护
参考数据如下:
车次信息表(车次,始发站,终点站,发车时间,到达时间)
订票信息表(车次,座位号,发车时期,发车时间,座位等级,票价)
车次座位等级分配及座位占用表(车次,座位号,座位等级,票价,占用标志)
用户信息表(用户名,密码,用户标识)
题目14:小型物业管理系统(1 人)
包括四大模块:
房源管理:对原始资料的录入、修改、查询和刷新。一般用户可以查询与房间有关 的统计资料;物业主管可其进行增、删、改、插等操作
租房管理:对房产出租,退租以及租房面积调整。其中物业主管可对其进行房租金 额计算和收款操作,一般用户对其查询
水电处理:根据租房资料,结合当月水、电量进行分摊,完成应收水电费。其中物 业主管对其进行计算,其他查询
交款处理:提供收款和发票打印以及交款数据查询
查询处理:对租房资料、交款资料,发票资料进行查询
参考数据如下:
房源资料(名称,面积,月租,物业,仓库)
租房资料(名称,面积,单位,月租,物业,押金,仓库)
水电资料(单位,电量,水量,电费,水费)
交费资料(收费项目,应收日期,应收金额,已收金额,未收金额,本次收款)
发票资料(单位,房租,电费,水费,物业)
权限资料(用户,密码,房源管理,租房管理,水电管理,交费管理,发票管理,系统维护) 其中系统管理员,有权进行系统维护;单位内部物业主管,有权进行物业资源调配、单元出 租,退租和收款开票操作;物业管理员,有权进行水电处理和收款处理等操行;租户代表, 有权进行种类费的查询操作
题目15:机房收费管理系统(1 人)7,34
包括四大模块:
登录模块
上机管理模块 说明:上机登记时,余额不足 3 元或卡处于挂失状态,则拒绝登记 每位同学的一次上机形成一条记录,每 36S 遍历一次上机记录表,对表中所有正上机字段为 TRUE 的记录的上机用时增加 36S,同时从上机卡表的余额减少
上机卡管理模块
充值挂失模块
查找统计模块:统计某天上机的总时数、每次上机的平均时数和机房的收入;某学 生上机的次数、上机总时数、每次上机平均时间;挂失和查询余
参考数据如下:
上机卡(卡号,姓名,专业班级,余额,状态) 状态的取值有:正常(能自费上机)
挂失上机记录(卡号,上机日期,开始时间,上机用时,正上机,管理号代码),上机用时记录学生上机时间(S);正上机是一个布尔型,为 True 表示正上机,每 36 秒刷新 其上机用时并扣除上机费用,为 False 表示上机结束。上机记录表永久保存,用于事后查询 和统计 管理员(代码,姓名,口令)
题目16:高校药房管理(1 人)31
包括四大模块:
基础数据处理:包括医生和药剂师名单的录入,修改,删除及查询
营业数据处理:包括药品进货上柜,处理划价,配药,柜存药品查询,处方综合查 询,交接班结转清。
参考数据如下:
药品信息表(货号,货名,计量单位,进货数量,进货单价,出售单价,进货日期,收货人 和供应商)
处方信息(编号,患者姓名,医生姓名,药剂师姓名,处方日期,配药日期) 处方药品信息(处方编号,药品货号,计量单位,配药数量,销售单价,已配药否)
医生名单和药剂师名单表(姓名)
题目17:考勤管理系统(2 人)40
包括四大模块:
记录每个员工每天所有进入公司的时刻和离开公司的时刻。
每天结束时自动统计当天的工作时间
每天结束时自动统计当天迟到或早退的次数。
对于弹性工作制,每天结束时自动统计当月的工时,并自动算出当月欠缺或富余的 时间
每个月末统计该月的工作时间判断是束足够
每个月末统计该月的工作天数并判断是否足够
管理人员查询并修改工作时间(特殊情况下修改)
管理人员账户管理(如设置密码等)
管理人员设定早退及迟到的条件,每个月的工作时间
管理人员设定每个月的工作日期及放假日期
参考数据如下:
员工信息(工号,姓名,年龄,入职时间,职位,性别,密码)
配置信息(上班时间小时,上班时间分钟,下班时间小时,下班时间分钟,每天工作时间)
每月统计数据表(工号,姓名,剩余的时间,迟到的次数,早退的次数,工作天数)
每天统计信息表(工号,姓名,小时,分钟,动作,时间) 其中动作指的时入或离开公司
题目18:单位房产管理系统(2 人)33,10
包括四大模块:
系统模块:完成数据库维护、系统关闭功能
物业费用模块:完成本月物业的计费、历史资料查询和财务部门接口传送数据、物 业相关费用单价设置
房屋资源模块:对房屋资源进行添加、列表显示、查询
职工信息模块:对职工进行添加、列表显示、查询以及相应部门、职务进行维护
帮助模块:对用户使用本系统提供在线帮助
参考数据如下:
职工(编号,姓名,性别,参加工作时间,行政职务,专业技术职务,评上最高行政职务时 间,评上最高专业技术职务时间,双职工姓名,现居住房号,档案号,房产证号,所在部门 编号,是否为户主)
部门(编号,部门名称) 住房级别表(编号,级别,住房标准,控制标准,级别分类)
房产情况(编号,房号,使用面积,现居住人 id,上一个居住人 id,最早居住人 ID,阳台面积)
物业费用(编号,房号,水基数,水现在值,电基数,电现在值,燃气基数,燃气现在值, 当前年份,当前月份)
价格标准(编号,水单价,电单价,燃气单价)
题目19:标准化考试系统 (2 人)15,39
功能要求: 设计一个简单的标准化考试系统,仅有单项选择题、多项选择题和判断题功能即可。
包括四大模块:
题库管理:实现试题的录入、修改、删除功能;
考试子系统:能够实现考生做题、结果自动存入到数据库中,有时间提示;
选择身份(登录)功能:系统能够记录考生输入的登录信息及交卷信息;
自动评分功能:考生交卷后能自动评分;
查看成绩功能:能够查询考生相关信息(包含成绩等)。
参考数据如下:
其它可供选择的题目:
网上教务评教系统130,127,133 16
学生日常行为评分管理系统232,110,230
网上鲜花店 38
基于BS结构的工艺品销售系统12
基于BS结构的校园二手物品交易网站 37
大学生就业管理系统201,208,234
题库及试卷管理系统
数据库原理及应用
课程设计报告
题目: 课程设计选题管理系统
所在学院:
班 级:
学 号:
姓 名: 李四
指导教师:
2011年12月 日
目录
一、 概述
二、需求分析
三、概念设计
四、逻辑设计
五、系统实现
六、小结
一、概述
⑹ 数据结构实验题
#include"iostream.h"
#include"math.h"
#include"stdlib.h"
class Calculator
{
public:
//接口方法声明
void Run();
private:
//辅助函数
bool IsOperator(char ch);//判断字符ch是否为操作符
char Precede(char theta1,char theta2);//判断相继出现的theta1和theta2的优先级
double Operate(double left,char theta,double right,int[] &a);//执行运算letf theta right
void Get2Operands(LinkStack<double>&opnd,double &left,double &right);
//从栈opnd中退出两个操作数
};
void Calculator::Get2Operands(LinkStack <double>&opnd,double &left,double &right)
{
}
bool Calculator:: IsOperator(char ch)
{
char ch;
cin>>ch;
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'ch=='('ch==')'||ch=='=')
return true;
else
return false;
}
char Calculator:: Operate(double left,char theta,double right)
{ double result;
switch(theta)
{
case'+':result=left+right;break;
case'-':result=left-right;break;
case'*':result=left*right;break;
case'/':result=left/right;break;
}
return result;
}
char Calculator:: Precede(char theta1,char theta2)
{
char ch;
switch(theta1)
{
case'+':
case'-':
{
switch (theta2)
{
case'+':
case'-':
case')':
case'=':
ch='>';
break;
case'*':
case'/':
case'(':
ch='<';
break;
}
break;
}
case'*':
case'/':
{
if(theta2=='(')
ch='<';
else
ch='>';
break;
}
case'(':
{
if(theta2==')')
ch='=';
else ch='<';
break;
}
case')':
{
ch='>';
break;
}
case'=':
{
if(theta2=='=')
ch='=';
else
ch='<';
break;
}
}
return ch;
}
//方法Run()算法实现如下
void Calculator::Run()
{//操作结果:按算符优先法进行表达式求值计算
LinkStack<double> opnd; //操作数栈
LinkStack<char>optr; //操作符栈
optr.push('='); //在optr栈中加入一个'='
char ch; //临时字符
char optrTop; //临时optr栈栈顶字符
double operand; //操作数
char theta; //操作符
cin>>ch; //从输入流获取一字符ch
while((optr.Top(optrTop),optrTop!='=')||ch!='=')
{
if(!IsOperator(ch))
{//ch不是操作字符
cin.putback(ch); //将字符放ch回输入流
cin>>operand; //读操作数operand
opnd.Push(operand); //进入opnd栈
cin>>ch; //读入下一字符ch
}
else
{//ch是操作符
switch(Precede(optrTop,ch))
{
case'<':
optr.Push(ch);
cin>>ch;
break;
case'=':
optr.Pop(optr Top);
cin>>ch;
break;
case'>':
double left,right;
Get2Operands(opnd,left,right);
optr.Pop(theta);
opnd.Push(Operate(left,theta,right));
break;
case'e':
cout<<"操作符匹配出错"<<endl;
exit(2);
}
}
}
opnd.Top(operand);
cout<<"表达式值为:"<<operand<<endl;
}
void main(void)
{
system("pause");
return 0;
}
希望能解决您的问题。
⑺ 数据结构完整版实验报告
(一)实验目的和要求
实验目的:熟练掌握线性表的基本操作在顺序存储结构上的实现。
实验要求:任选一种高级程序语言编写源程序,并调试通过,测试正确。
(二)实验主要内容
1. 建立n个元素的顺序表SqList,实现顺序表的基本操作;
2. 在SqList的元素i之后插入一个元素,实现顺序表插入的基本操作;
3. 在sqList中删除指定位置i上的元素,实现顺序表删除的操作。
4.
(三)主要仪器设备
PC机,Windows XP操作平台,Visual C++
(四)实验原理
顺序表操作:定义一个顺序表类,该类包括顺序表的存储空间、存储容量和长度,以及构造、插入、删除、遍历等操作的方法
(五)实验步骤与调试分析:
顺序表操作:先构造有四个数据的顺序表,在第4个位置插入9,再读取并删除第3个元素。
(六)实验结果与分析:
顺序表操作:
(七)附录(源程序):
#include<iostream>
using namespace std;
const int LIST_INIT_SIZE=10; //顺序表初始长度
const int LISTINCREMENT=5; //顺序表长度增值
class SqList
{
int *L; //定义存储空间起始地址
int length; //顺序表当前长度
int listsize; //顺序表当前存储容量
bool flag; //设立标志值记录操作成败
public:
SqList(int v1,int v2,int v3,int v4); //构造函数构造并初始化顺序表
void ListInsert(int i,int e); //实现将e插入到顺序表中第i个位置
void ListDelete(int i,int &e); //实现删除顺序表第i个元素
void ListVisit(); //实现顺序表的遍历
};
SqList::SqList(int v1,int v2,int v3,int v4) //构造并初始化顺序表
{
L=new int[LIST_INIT_SIZE];
if(!L) //分配失败
{
flag=false;
cout<<"ERROR"<<endl;
}
else //分配成功,进行初始化
{
*L=v1;
*(L+1)=v2;
*(L+2)=v3;
*(L+3)=v4;
length=4;
listsize=LIST_INIT_SIZE;
flag=true;
}
}
void SqList::ListInsert(int i,int e) //插入元素
{
int *p,*q;
int t;
if(i<1||i>length+1) cout<<"ERROR"<<endl; //插入位置错误
else
{
if(length==listsize) //空间不足,增加分配
{
p=new int[listsize+LISTINCREMENT];
if(!p) cout<<"ERROR"<<endl; //分配失败
else //分配成功,复制顺序表
{
for(t=0;t<length;t++)
*(p+t)=*(L+t);
q=L;L=p;p=q;
delete q;
listsize+=LISTINCREMENT;
}
}
for(t=length;t>=i;t--)
*(L+length)=*(L+length-1);
*(L+i-1)=e;
length++; //插入成功,表长加1
}
}
void SqList::ListDelete(int i,int &e)
{
if(i<1||i>length) cout<<"ERROR"<<endl; //删除位置错误
else
{
e=*(L+i-1);
while(i<length)
{
*(L+i-1)=*(L+i);
i++;
}
length--; //删除成功表长减1
}
}
void SqList::ListVisit() //遍历
{
int i;
for(i=0;i<length;i++)
cout<<" "<<*(L+i);
cout<<endl;
}
int main()
{
int e=0;
SqList list(2,3,4,5);
list.ListVisit();
list.ListInsert(4,9);
list.ListVisit();
list.ListDelete(3,e);
list.ListVisit();
cout<<"e="<<e<<endl;
return 0;
}
⑻ 数据结构实验:运用顺序表或链表,实现对学生成绩的输入、输出、查询、插入、删除、修改、排序等功能
这个问题你可以用易微库表这个工具试下,工具可以在网络软件http://rj..com/中搜索易微库表,使用手册可以在网络文库http://wenku..com/中搜索易微库表,以下是简介
普通人也可以自己设计程序,根据平时处理业务数据时总结的表格、方法、公式等信息,创建一个自己的程序。数据结构自定义、自动计算记录数、自动计算列合计、录入首字母自动显示相应的属性类值、Excel数据处理、数据去重、数据整理、数据统计、数据一维表变成二维表的列转行,数据公式计算、数据首字母检索、数据快速检索、Excel数据导入、Excel数据导出、数据显示排序、查询结果计算百分比、查询结果计算顺序名次、数据查询条件自定义、数据高级筛选、小数据量数据挖掘、自定义显示字段名称等等这些功能都可以通过简单配置后即可实现。如此神奇的事情,赶快创建一个属于自己的库表程序吧。
⑼ 数据结构实验
我写的顺序线性表的完整的C++代码。
核心操作函数基本依照《数据结构(C语言版)》教材。仅供参考。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<iostream.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
#defineLIST_INIT_SIZE80
//线性表存储空间的初始分配量
#defineLISTINCREMENT10
//线性表存储空间的分配增量
typedefstruct{
ElemType *elem; //内存基址,ElemType为数据元素类型
int length; //当前表长
int listsize; //当前分配的存储空间大小,以sizeof(ElemType)为单位
}SqList; //sequentiallist
//构造一个空的顺序表
StatusInitList_Sq(SqList&L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
//L.elem=newElemType(LIST_INIT_SIZE);
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;//OK是1
}//InitList_Sq
//在顺序表中查询数据元素e是否存在,返回它的位序
intLocateElem_Sq(SqListL,ElemTypee){
inti=1; //从首元素开始比较
ElemType*p=L.elem; //p指向首元素
while((i<=L.length)&&(e!=*p))
{++i;++p;} //继续查找
if(i<=L.length)returni; //查找成功,返回位序
elsereturn0; //不成功
}
//在顺序表L的第i个元素之前插入新元素e,
//i的取值范围为1≤i≤L.length+1
StatusListInsert_Sq(SqList&L,inti,ElemTypee){
if(i<1||i>L.length+1)returnERROR; //不合法
if(L.length==L.listsize){ //存储空间已满,增加分配
ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW); //存储分配失败
L.elem=newbase; //新基址
L.listsize+=LISTINCREMENT; //增加存储容量
}
//合法性检查
ElemType*q=L.elem+i-1; //q指示插入位置
ElemType*p;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1)=*p; //插入位置及之后的元素右移
*q=e; //插入e。L.elem[i-1]=e
++L.length; //表长增1
returnOK;
}
//删除顺序表L的第i个元素,并用e返回,
//1≤i≤L.length
StatusListDelete_Sq(SqList&L,inti,ElemType&e){
if((i<1)||(i>L.length))returnERROR; //删除位置不合法
ElemType*p=L.elem+i-1; //p为被删除元素的位置
e=*p; //被删除元素L.elem[i-1]赋给e
ElemType*q=L.elem+L.length-1; //表尾元素的位置
for(++p;p<=q;++p)
*(p-1)=*p; //被删除元素之后的元素左移
--L.length; //表长减1
returnOK;
}//将顺序表L销毁
voidDestroyList_Sq(SqList&L){
free(L.elem);
}
//将顺序表L重置为空表
voidClearList_Sq(SqList&L){
L.length=0;
}
//若顺序表L为空表,则返回TRUE,否则返回FALSE
StatusListEmpty_Sq(SqListL){
if(L.length)returnFALSE;
elsereturnTRUE;
}
//返回顺序表L中数据元素的个数
intListLength_Sq(SqListL){
returnL.length;
}
//用e返回顺序表L中第i个数据元素的值
StatusGetElem_Sq(SqListL,inti,ElemType&e){
if(i<1||i>L.length)returnERROR; //不合法
ElemType*p=L.elem+i-1;
e=*p;
returnOK;
}
//用pre_e返回顺序表L中cur_e的前驱
StatusPriorElem_Sq(SqListL,ElemTypecur_e,ElemType&pre_e){
inti=LocateElem_Sq(L,cur_e);
if(i==0||i==1)returnERROR;
GetElem_Sq(L,i-1,pre_e);
returnOK;
}
//用next_e返回顺序表L中cur_e的后继
StatusNextElem_Sq(SqListL,ElemTypecur_e,ElemType&next_e){
inti=LocateElem_Sq(L,cur_e);
if(i==0||i==L.length)returnERROR;
GetElem_Sq(L,i+1,next_e);
returnOK;
}
//依次对顺序表L的每个数据元素调用函数visit()
voidListTraverse_Sq(SqListL,Statusvisit(inti,ElemTypee)){
inti=1;
ElemType*p=L.elem;
while(i<=L.length){
visit(i,*p);
++i;++p;
}
}
//遍历_输出
Statusprint(inti,ElemTypee){
cout<<"第"<<i<<"个元素值为:"<<e<<endl;
}
main()
{
SqListL;
intchoice,reply;
ElemTypee,e2;
inti;
while(1){
cout<<"对顺序表L的操作:";
cout<<"1.初始化2.插入3.删除4.遍历5.取值6.查找7.统计个数"<<endl;
cout<<"8.是否空表9.前驱10.后继11.清空12.销毁0.退出"<<endl;
cin>>choice;
switch(choice){
case1://构造一个空的顺序表
reply=InitList_Sq(L);
if(reply==0)cout<<"失败!"<<endl;
break;
case2://在顺序表L的第i个元素之前插入新元素e(i的取值范围为1≤i≤L.length+1
cout<<"请输入新数据元素的值:";cin>>e;
cout<<"请输入插入到表中的位序:";cin>>i;
reply=ListInsert_Sq(L,i,e);
if(reply==0)cout<<"失败!"<<endl;
break;
case3://删除顺序表L的第i个元素,并用e返回(1≤i≤L.length
cout<<"请输入欲删除的数据在表中的位序:";cin>>i;
reply=ListDelete_Sq(L,i,e);
if(reply==0)cout<<"失败!"<<endl;
else
cout<<"您删除的数据为:"<<e<<endl;
break;
case4://依次对顺序表L的每个数据元素调用函数visit()
ListTraverse_Sq(L,print);
break;
case5://用e返回顺序表L中第i个数据元素的值
cout<<"请输入位序:";cin>>i;
reply=GetElem_Sq(L,i,e);
if(reply==0)cout<<"失败!"<<endl;
else
cout<<"表中第"<<i<<"个数据的值为:"<<e<<endl;
break;
case6://在顺序表中查询数据元素e是否存在,返回它的位序
cout<<"请输入欲查找的数据元素的值:";cin>>e;
i=LocateElem_Sq(L,e);
if(i!=0)cout<<"该数据在表中的位序为:"<<i<<endl;
elsecout<<"该数据在表中并不存在。"<<endl;
break;
case7://返回顺序表L中数据元素的个数
i=ListLength_Sq(L);
cout<<"表中有"<<i<<"个数据元素。"<<endl;
break;
case8://若顺序表L为空表,则返回TRUE,否则返回FALSE
reply=ListEmpty_Sq(L);
if(reply==TRUE)cout<<"该表为空表。"<<endl;
elsecout<<"该表不是空表。"<<endl;
break;
case9://用pre_e返回顺序表L中cur_e的前驱
cout<<"请输入欲查找的数据元素的值:";cin>>e;
reply=PriorElem_Sq(L,e,e2);
if(reply==0)cout<<"失败!"<<endl;
else
cout<<"该数据元素的前驱元素的值为:"<<e2<<endl;
break;
case10://用next_e返回顺序表L中cur_e的后继
cout<<"请输入欲查找的数据元素的值:";cin>>e;
reply=NextElem_Sq(L,e,e2);
if(reply==0)cout<<"失败!"<<endl;
else
cout<<"该数据元素的后继元素的值为:"<<e2<<endl;
break;
case11://将顺序表L重置为空表
ClearList_Sq(L);
break;
case12://将顺序表L销毁
DestroyList_Sq(L);
break;
case0:
exit(0);
default:
break;
}
cout<<endl;
}
}
⑽ 数据结构上机编程(单链表的基本操作)
void main()
{ int a[10]={12,14,15,11,19,30,20,9,4,44};/*生成数组*/
int i,e;
struct node *l,*s,*p;
l=(struct node*)malloc(sizeof(struct node));
if(!l) printf("Error!\n");
l->next=NULL;/*初始化空链表*/
while(i<10)
{
e=a[i];
insert(l,e);
}/*依次将数组读入,生成一个升序的单链表*/
//对单链表实现就地逆置
template <class T>
void mylist<T>::Invert()//翻转
{
if ( IsNull() || ncount == 1) return;
listnode<T>* m,* n;
m = first;
while (m!=NULL)
{
listnode<T>* r = n;
n = m;
m = m->link;
n->link = r;
}
first = n;
}
printf("please insert a int number(-32768~32767):");
scanf("%d",&e); /*从键盘输入一个数据*/
insert(l,e);/*插入到链表的适当位置,并保持链表的有序性*/
output(l);/*打印单链表*/
}