急:C++ 单链表的编写

作者&投稿:延呼 (若有异议请与网页底部的电邮联系)
创建一个单链表(用C写)急!~

#include "stdio.h"
#include "malloc.h"
typedef struct node
{
int data;
struct node *next;
}linklist;
int main()
{
//尾插法建立链表
linklist *h=NULL,*s,*r;
char c;
do {
s=(linklist *)malloc(sizeof(linklist));
printf("请输入链表信息(整数)");
scanf("%d",&s->data);getchar();
if(h==NULL)
h=s;
else
r->next=s;
r=s;
printf("请问是否继续输入Y/N:");
c=getchar();
} while(c!='N'&&c!='n') ;
r->next=NULL;
//输出链表
s=h;
while(s!=NULL)
{
printf(" %d",s->data);
s=s->next;
}
printf("
");
return 0;
}

我 百度空间 有 看看合适不~~~合适就采纳啊··

C++的学生信息管理系统.
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//定义结构体
struct date{
int year;
int month;
int day;
};
struct studentData
{
char stuNum[9];
char name[20];
char sex[3];
int age;
struct date birth;
float score[4];
};
float add(float a,float b,float c)
{
float z;
z=((a+b+c)/3);
return z;
}
//////////////////////
char *pFileName = 0;
//函数名英语字母顺序排列
void addRecord(fstream &);
void createNewFile();
void bsort(struct studentData pname[],int n);//按姓名递增冒泡程序
void ssort(struct studentData ptscore[],int n);//总分递减选择排序
void ssrch_stuNum(char *);//按学号查找和平均分数
void bsrch_name(char *);//按姓名查找和平均分
void find_ave(struct studentData*pstud,int n);//查各科均分
void find_pnum(struct studentData*pstud,int n);//查男女生总人数
void deleteRecord(char *);
void displayAllRecord(char *);
void findRecord(char *);
void functionMenu();
void initial(fstream &);
void insertRecord(char *);
void mainMenu();
void menu();
void operateExitedFile();
void updateRecord(char *);
///////////////////////////////////////////////////////////
//主函数
void main()
{
int recev;
studentData student();
mainMenu();
cout<<"请输入您的选择(0~2): ";
cin>>recev;
do
{
switch(recev)
{
case 0:
cout<<"\t\t\t谢谢使用!再见!"<<endl;
exit(1);
case 1:
createNewFile();
mainMenu();
break;
case 2:
operateExitedFile();
mainMenu();
break;
default:
cout<<"您输入的选项不存在,请查证后再选择!"<<endl;
}
cout<<"请输入您的选择(0~2): ";
}while(cin>>recev);
}
///////////////////////////////////////////////
/////////// 函数区 //////////////////
//添加纪录函数
void addRecord(fstream &fInOut)
{
studentData student;
cout<<"请输入学号: ";
cin>>student.stuNum;
cout<<"请输入姓名: ";
cin>>student.name;
cout<<"请输入性别(m男§f女): ";
cin>>student.sex;
cout<<"请输入年龄(15~50): ";
cin>>student.age;
while(student.age <= 15 || student.age >= 50)
{
cout<<"年龄超出限定范围,请重新输入!"<<endl;
cout<<"请输入年龄(15~50): ";
cin>>student.age;
}
cout<<"请输入出生年: ";
cin>>student.birth.year;
cout<<"月:";
cin>>student.birth.month;
cout<<"日:";
cin>>student.birth.day;
cout<<"请输入数学,英语,C语言成绩: ";
for (int j=0;j<3;j++)
{
float m;
cin>>student.score[j];
m=add(student.score[0],student.score[1],student.score[2]);
student.score[3]=m;
}
cout<<"该学生的平均分数为:"<< student.score[3]<<endl;
fInOut.seekp( (atoi(student.stuNum) - 1) *sizeof(studentData) );
fInOut.write( reinterpret_cast<const char *>(&student),
sizeof(studentData) );
}
//创建新文件函数
void createNewFile()
{
cout<<"请输入文件全名(如copy.dat): ";
char fileName[20];
cin>>fileName;
fstream fout(fileName, ios::out |ios::ate);
initial(fout);//初始化文件记录
//打开FileName.dat文件
ofstream outPutFileName("FileName.dat", ios::out | ios::app);
if(!outPutFileName)
{
cerr<<"file could not be opend.\n";
exit(1);
}
outPutFileName<<fileName<<endl;//把新建文件的文件名写入FileName.dat
cout<<"开始输入数据 "<<endl;
int yn;
do
{
addRecord(fout);
cout<<"要继续输入数据吗?(1 yes|0 no)"<<endl;
cin>>yn;
}while(yn);
fout.close();
cout<<"您输入的数据已保存"<<endl;
//接下来判断是否对它进行操作(有待添加这些功能)
}
//删除记录函数
void deleteRecord(char *pFileName)
{
studentData student;
int sn;
cout<<"输入您想删除的记录号:"<<endl;
cin>>sn;
fstream fInOut(pFileName,ios::in | ios::out );
if(sn != 0 )
{
studentData blankRecord = {0," ",' ',0," "," "};
fInOut.seekp( (sn - 1)*sizeof(studentData) );
fInOut.write( reinterpret_cast<const char *>(&student),sizeof(studentData) );
cout<< "学生 #" << sn <<"已被删除"<<endl;
}
else
cout<< "学生 #" << sn <<"是空记录"<<endl;
fInOut.close();
}
//显示所有记录函数
void displayAllRecord(char *pFileName)
{
studentData student;
ifstream output(pFileName,ios::in ); // |ios::out
output.read(reinterpret_cast< char * >(&student),sizeof(studentData));
cout <<setiosflags(ios::left)<<setw(10)<<"学号"
<<setw(20)<<"姓名"<<setw(3)<<"性别"<<setw(6)<<"年龄"
<<setw(3)<<"生日年"<<setw(3)<<"月"<<setw(3)<<"日"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"C语言"<<endl;
while(output && !output.eof())
{
if((atoi(student.stuNum)) != 0)
cout <<setiosflags(ios::left)<<setw(10)<< student.stuNum
<<setw(20)<< student.name<<setw(3)<< student.sex<<setw(6)<< student.age
<<setw(7)<< student.birth.year<<setw(3)<<student.birth.month<<setw(3)<<student.birth.day<<setw(10)<<student.score[0]<<setw(10)<<student.score[1]<<setw(10)<<student.score[2]<<endl;
output.read(reinterpret_cast< char *>(&student),sizeof(studentData));
}
output.close();
}
//查找记录函数按学号查平均分
void findRecord(char *pFileName)
{
cout<<"请输入您要查找的记录的学号: ";
studentData student;
cin>>student.stuNum;
fstream fInOut(pFileName,ios::in );
fInOut.seekg( (strlen(student.stuNum - 1)*sizeof(studentData) ));
fInOut.read( reinterpret_cast< char *>(&student),sizeof(studentData) );
cout <<setiosflags(ios::left)<<setw(10)<<"学号"<<setw(20)<<"姓名"<<
setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"C语言"<<setw(10)<<"平均"<<endl;

cout <<setiosflags(ios::left)<<setw(10)<< student.stuNum
<<setw(20)<< student.name
<<setw(10)<< student.score[0]<<setw(10)<<student.score[1]<<setw(10)<<student.score[2]<<setw(10)<<student.score[3]<<endl;
}
void bsrch_name(char *pFileName)//按姓名查找和平均分数
{
cout<<"请输入您要查找的记录的姓名: ";
studentData student;
cin>>student.name;
fstream fInOut(pFileName,ios::in );
fInOut.seekg( (strlen(student.stuNum-1)*sizeof(studentData) ));
fInOut.read( reinterpret_cast< char *>(&student),sizeof(studentData) );
cout <<setiosflags(ios::left)<<setw(10)<<"学号"
<<setw(20)<<"姓名"<<setw(10)<<"平均分"<<endl;
cout <<setiosflags(ios::left)<<setw(10)<< student.stuNum
<<setw(20)<< student.name<<setw(10)<<student.score[3]<<endl;
}

//功能菜单(选择"2.查看已有文件"后调用)
void functionMenu()
{
cout<<"现在操作的文件名是:";
cout<<pFileName<<endl;
menu();
cout<<"请输入您要的操作号: ";
int choice;
cin>>choice;
do{
switch(choice)
{
case 1:
displayAllRecord(pFileName);
cout<<endl;
menu();
cout<<"请输入您要的操作号: ";
cin>>choice;
break;
case 2:
insertRecord(pFileName);
cout<<endl;
menu();
cout<<"请输入您要的操作号: ";
cin>>choice;
break;
case 3:
updateRecord(pFileName);
cout<<endl;
menu();
cout<<"请输入您要的操作号: ";
cin>>choice;
break;
case 4:
deleteRecord(pFileName);
cout<<endl;
menu();
cout<<"请输入您要的操作号: ";
cin>>choice;
break;
case 5:
findRecord(pFileName);
cout<<endl;
menu();
cout<<"请输入您要的操作号: ";
cin>>choice;
break;
case 6:
bsrch_name(pFileName);
cout<<endl;
menu();
cout<<"请输入您要的操作号: ";
cin>>choice;
break;

case 0:
break;
default:
{
cout<<"您输入的选项不存在,请查证后再选择!"<<endl;
cout<<"请输入您要的操作号: ";
cin>>choice;
}
}//end of switch
}while(choice >= 0 && choice <= 5);
}
////////////////////
void initial(fstream &iniFile)
{
studentData student = {0,"\0",'m',0,"\0","\0"};//
for(int i = 0; i < 100; i++)
iniFile.write(reinterpret_cast<const char *>(&student),sizeof(studentData));
}
//插入数据函数
void insertRecord(char *pFileName)
{
fstream fInOut(pFileName,ios::out | ios::ate);
if(!fInOut)
{
cerr<<"file could not be opend.\n";
exit(1);
}
int yn;
do
{
addRecord(fInOut);
cout<<"要继续添加数据吗?(1 yes|0 no)"<<endl;
cin>>yn;
}while(yn);
fInOut.close();
}
//显示主菜单函数
void mainMenu()
{
cout<<"\t\t\t*****************************\n";
cout<<"\t\t\t* 学 生 信 息 管 理 *\n";
cout<<"\t\t\t*****************************\n";
cout<<"\t\t\t\t1.创建新文件\n\n\t\t\t\t2.查看已有文件\n\n\t\t\t\t0.退出系统"<<endl;
}
//功能菜单前显示的菜单函数
void menu()
{
cout <<"\t\t\t\t1.显示全部记录\n\n\t\t\t\t2.添加纪录\n\n\t\t\t\t3.修改记录"
<<"\n\n\t\t\t\t4.删除记录\n\n\t\t\t\t5.查找记录\n\n\t\t\t\t6.按姓名查平均分\n\n\t\t\t\t0.返回上级菜单"<<endl;
}
//查看已有文件函数
void operateExitedFile()
{
cout<<"已存在的文件名:"<<endl;
ifstream inPutFileName("FileName.dat",ios::in);
char fileNameA[20];
while(inPutFileName>>fileNameA)
{
cout<<fileNameA<<endl;
}
inPutFileName.close();
cout<<endl<<"请输入您要操作的文件全名: ";
char fileName[20];
cin>>fileName;
pFileName = fileName;//指针指向要操作的文件名,以备传递
fstream fInOut(fileName,ios::in | ios::out | ios::app);
if(!fInOut)
{
cerr<<"文件打不开!\n";
exit(1);
}
fInOut.close();
functionMenu();
}
//修改记录函数
void updateRecord(char *pFileName)
{
fstream fInOut(pFileName,ios::out | ios::ate);
cout<<"请输入您要修改的记录的学号"<<endl;
addRecord(fInOut);
fInOut.close();
}


芦山县15589827650: 用c++写一个单链表 -
满高通泰: typedef struct tagTList { int m_nKey; struct tagTList *m_pNext; tagTList(void) { m_nKey = 0; m_pNext = NULL; } tagTList(int nValue) { m_nKey = nValue; m_pNext = NULL; } }TList; void CreateList(TList* &h, int n) { TList *pTemp = NULL, *pIT: h = new ...

芦山县15589827650: C++编程(单链表) -
满高通泰: #include <iostream> using namespace std; struct WORKER { int num;//职工号 double wage; //工资 }; struct NODE { WORKER worker; NODE *next; }; void addData(NODE *(&list)) { int num;double wage; bool flag=true; while(flag) { cout<<"请...

芦山县15589827650: c++建立单向链表
满高通泰: 自己定义数据类型:struct student { },然后使用C++ STL中的list就可以了.不需要自己再去编写链表了.建议编程多多使用STL中的容器,这样不仅方便,而且代码质量好,效率高!

芦山县15589827650: 如何用c++创建一个单向链表存储有字符串的纪录数据并按输入的顺序输出 -
满高通泰: //一个简单但完整的单向链表 #include #include using namespace std; struct node //定义结构体 { char* ch; //存放数据字符串 struct node* next; //指向下一个结点 }; struct node* Create() //新建结点并初始化 { struct node* n=new struct node; ...

芦山县15589827650: C++单链表的操作方法 -
满高通泰: #include "stdio.h" typedef struct lnode /*定义节点类型*/ {char data; /*数据域*/struct lnode *next; /*指针域*/}lnode;/*函数名称:creat*/ /*功能描述:生成单链表*/ /*返回类型:无返回值*/ /*函数参数: h:单链表头指针*/ void creat(lnode *h)...

芦山县15589827650: 数据结构 单链表制作(c++)
满高通泰: // menue.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using namespace std; #include <stdlib.h> #include <iomanip> typedef void (*PFUN)(); struct Order { const char *ccmd; const char *cinfo; ...

芦山县15589827650: 用C++语言的类的单链表如何实现 -
满高通泰: 所谓单链表,是指数据接点是单向排列的.一个单链表结点,其结构类型分为两部分: 1、数据域:用来存储本身数据 2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针. 例:typedef struct node { char name[20]; ...

芦山县15589827650: c++头插法建立单链表代码 -
满高通泰: //小错 #include <iostream> using namespace std; #include <malloc.h>/*包含动态内存分配函数的头文档*/ #define NULL 0 #define DataType int typedef struct node/*单链表结构类型定义*/ {DataType data;/*结点的数据域*/struct node*next;/*结...

芦山县15589827650: 求教:在c++中如何用类实现一个简单的单向链表?? -
满高通泰: 问题好乱!一、getnext、setnext 这两个函数再明白不过了,设计者在类package中定义了一个package* pnext;用来指向链表的下一个元素,getnext就是要取得下一个元素,自然返回该指针,setnext就是要给当前元素指定其下一个元素的地址...

芦山县15589827650: c++创建链表 -
满高通泰: #include"malloc.h"using namespace std;struct LinkList{ int data; LinkList *next;};void CreateList_L(LinkList *&L,int n){ int i; LinkList *p; L=(LinkList...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网