警察依法杀人:高分求C语言单链表操作 急!!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 19:10:19
C语言单链表操作
带有输入 输出 插入 删除 查找 合并模块
带有一个主函数来调用各个模块
输入数据十组。
急求 最好有注释 谢谢了 。。。

压仓底的东西再次拿出,有点不同

/*系统功能是:实现班级学生信息管理,学生信息字段:(不能相同),姓名,籍贯,出生年月四个字段。 程序能对
学生信息进行输入、查询、删除、保存、依照学号排序等操作。*/
#include<stdio.h>
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<conio.h>
#define SIZE 10
//-------------------------------------------------------------------------------
//函数种类
/* void dakai(int n,int j,char ch);
void save(int n,char ch);
void display(int n,char ch);//显示信息
void xiugai();
void dakai(int n,int j,char ch);//查找文件
void shuru(int n,char ch);//输入信息
void paixu(int n,char ch);
void xuanzhe(int n,char ch);//选择运行程序*/

//-------------------------------------------------------------------------------
struct student_type//定义结构体
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];

//-----------------------------------------------------------------------------------------

void save(int n,char ch)//保存输入信息
{

FILE *fp;
int i;
if((fp=fopen("f:\\stu_list.txt","wb+"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<n;i++)
if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
//------------------------------------------------------------------------------------------

void display(int n,char ch)//显示信息
{
FILE *fp;
int i;
if((fp=fopen("f:\\stu_list.txt","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fread(&stud[i],sizeof(struct student_type),1,fp);
printf("姓名:%-10s学号:%4d年龄:%4d地址:%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
}
//--------------------------------------------------------------------------------------------

void xiugai(int n,char ch)//修改学生信息
{
int z;
FILE *pf;
pf=fopen("f:\\stu_list.txt","rb+");
if(pf==NULL)
{
printf("\n pf open Error,\n exit program.");
return;
}
else
{
//输入学生信息
cout<<"请输入你要修改的学号:"<<endl;
cin>>z;
fseek(pf,z*sizeof(struct student_type),2);
scanf("%s%d%d%s",stud[z].name,&stud[z].num,&stud[z].age,stud[z].addr);
fseek(pf,sizeof(struct student_type),0);
fwrite(&stud,sizeof(struct student_type),1,pf);
}
fclose(pf);
//save(n,ch);
//display(n,ch);

}

//-----------------------------------------------------------------------------------------------
/* struct stud
{
int num;
struct studt;
} *head;

void printnode(stud
{
while(p->next!=NULL)
{
//输出p指向的数据
cout<<p->num<<" ";
p=p->next;//指向下一个
}
cout<<p->num<<endl;
}

//---------------------------------------------------------------------------------------------

void dakai2()
{
node *p=new node;
head=p;//设置头指针
p->num=90;

for(int k=1;k<10;k++)
{
//产生下一个结点1
p->next=p+k;
p=p->next;
p->num=k*100;
}
p->next=NULL;
printnode(head);
}*/

//------------------------------------------------------------------------------------------------

void dakai(int n,int j,char ch)//查找文件
{
//int i=2;
//char ch1,filename[20];
FILE *fp;
//int i=0;
//display(n,ch);
//cout<<"请输入所要查找的文件名,以'#'结束输入"<<endl;
//scanf("%s",filename);
cout<<"---------------------------------------------------------------------------"<<endl;
if ((fp=fopen("f:\\stu_list.txt","rb"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(int i=0;i<4;i+=1)
{
fseek(fp,i*sizeof(struct student_type),2);
fread(&stud[i],sizeof(struct student_type),1,fp);
if(stud[i].num==j)
//{
printf("姓名:%-10s学号:%4d年龄:%4d地址:%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

}
//i++;
//}

// }
/*fread(&stud[i-1],sizeof(struct student_type),i,fp);
cout<<"姓名";
printf("%-10s",stud[i-1].name);
cout<<"学号";
printf("%4d",stud[i-1].num);
cout<<"年龄";
printf("%4d",stud[i-1].age);
cout<<"地址";
printf("%-15s\n",stud[i-1].addr);
// }
/*
while((ch=getchar())!='#')
{
fputc(ch,fp);
putchar(ch);
}*/
fclose(fp);
}

//----------------------------------------------------------------------------------------------------------

void shuru(int n,char ch)//输入信息
{
int i;
cout<<"现在请输入学生个数:";
cin>>n;
cout<<"现在请输入"<<n<<"个学生的信息:"<<endl;
for(i=0;i<n;i++)
{

cout<<"请输入第"<<i+1<<"个学生的姓名,学号,年龄,地址:"<<endl;
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);

}
save(n,ch);
display(n,ch);

}

//----------------------------------------------------------------------------------------------------------

void paixu(int n,char ch)
{
fstream outfile,infile;
infile.open("f:\\stu_list.txt",ios::in);
if(!infile)
{
cerr<<"文件打开失败!"<<endl;
exit(0);
}
student_type textline[80];
// int i=0;
// while(!infile.eof())
// {
// i++;
// infile.getline(textline,sizeof(textline));
// if
//cout<<i<<":"<<textline<<endl;
}
infile.close();
}
//-------------------------------------------------------------------------------------------------------
/* void paixu2()
{
student_type ww;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{

if(stud[i].num>stu[j].num)
{
ww.num=stud[i].num;
stud[i].num=stud[j].num;
stud[j].num=ww.num;
ww.
*/

//-----------------------------------------------------------------------------------------------------------

void xuanzhe(int n,char ch)//选择运行程序
{
int i,j;
if(ch=='s')//输入
{
shuru(n,ch);
cout<<"---------------------------------------------------------------------"<<endl;
cout<<" 请输入命令"<<endl<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}
else if(ch=='f')//查找
{
cout<<"请输入要查找的编号:"<<endl;
cin>>j;
dakai(n,j,ch);
cout<<"---------------------------------------------------------------------"<<endl;
cout<<" 请输入命令"<<endl<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}
else if(ch=='a')//保存
{
save(n,ch);
cout<<"---------------------------------------------------------------------"<<endl;
cout<<" 请输入命令"<<endl<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}
else if(ch=='p')
{
paixu(n,ch);
cout<<"---------------------------------------------------------------------"<<endl;
cout<<" 请输入命令"<<endl<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}
else if(ch=='x')//修改
{
xiugai(n,ch);
cout<<"------------------------------------------------------------------------"<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}
else if(ch=='d')
{
display(n,ch);//显示信息
cout<<"------------------------------------------------------------------------"<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}

else
{
cout<<"命令错误!"<<endl;
}
}

//--------------------------------------------------------------------------------------------------

void main()//主函数
{
int n;
char ch;
cout<<"---------------------------------------------------------------------"<<endl;
cout<<" 请输入命令"<<endl;
cout<<"s(输入信息)、f(查找信息)、d(删除)、p(排序)、a(存储信息)按其他键退出"<<endl;
cin>>ch;
xuanzhe(n,ch);
}

谭浩强的c语言,结构体一章
严蔚敏的数据结构
自己看去
回答者:domeng - 见习魔法师 三级 7-23 10:38
回答者:凯文郭 - 试用期 一级 7-23 14:18

谭浩强的c语言,结构体一章
严蔚敏的数据结构
自己看去

-----------线性表的单链表存储结构-------------

typedef struct Node{

ElemType data;

struct Node *next;

} *LNode, *LinkList;

//----------线性表的单链表基本操作------------

LinkList InitList(void); //构造一个空的线性表

void DestroyList(LinkList *L);//初始条件:线性表L已存在。 操作结果:销毁线性表L。

LinkList MakeEmpty(LinkList L);//初始条件:线性表L已存在。 操作结果:将线性表L重置为空表。

int IsEmpty(LinkList L);//初始条件:线性表L已存在。 操作结果:判断线性表是否为空表。

int ListLength(LinkList L);//初始条件:线性表L已存在。 操作结果:返回线性表L结点的个数。

LNode IsLast(LinkList L); //初始条件:线性表L已存在。 操作结果:返回线性表L的最后一个结点(尾结点)。

LNode NewLNode(ElemType X);//构造一个数据域为X的新结点

LNode FindPrefious(ElemType X, LinkList L);//初始条件:线性表L已存在。 操作结果:在线性表L中寻找值为X的结点,若找到则返回该结点的前驱,否则返回NULL。

void ListDelete(LNode Pre);//初始条件:线性表L中结点P已找到。 操作结果:删除该结点。

void ListInsert(LNode Pre, LNode S);//初始条件:线性表L中结点P已找到,新结点S已构造。 操作结果:在该结点之前插入新结点X。

----------线性表的单链表基本操作的算法实现------------

//我给链表设置了一个头结点,虽然它的数据域毫无意义,但它作为一个指针却意义非凡!

//它的作用我们在下面的例程中可以领教

LinkList InitList(void) //构造一个空的线性表

{

LNode Head;

Head = (LNode)malloc(sizeof(struct Node)); //为链表的头结点分配空间

if(!Head)

{

printf("Out of space!");

return NULL;

}

Head->next = NULL;

return Head;//返回头结点

}

void DestroyList(LinkList *L)//初始条件:线性表L已存在。 操作结果:销毁线性表L。

{

LNode Head, P;

if(*L)//若线性表L已存在

{

Head = *L;

P = Head->next;

while(!P) //把链表中除头结点外的所有结点释放

{

free(Head);

Head = P;

P = Head->next;

}

free(Head); //释放头结点

}

}

LinkList MakeEmpty(LinkList L)//初始条件:线性表L已存在。 操作结果:将线性表L重置为空表。

{

LNode Head, P;

Head = *L;

P = Head->next;

while(!P)//把链表中除头结点外的所有结点释放

{

free(Head);

Head = P;

P = Head->next;

}

return (Head); //返回头结点

}

int IsEmpty(LinkList L);//初始条件:线性表L已存在。 操作结果:判断线性表是否为空表。

{

return L->next == NULL;

}

int ListLength(LinkList L)//初始条件:线性表L已存在。 操作结果:返回线性表L结点的个数。

{

LNode P = L->next;

int num = 0;

while(P) //累积线性表L结点的个数

{

num++;

P = P->next;

}

return num; //返回线性表L结点的个数

}

//初始条件:线性表L已存在。 操作结果:返回线性表L的最后一个结点(尾结点)。

LNode IsLast(LinkList L)

{

LNode P = L->next;

if(P)

{

while(P->next) //遍历线性表L

P = P->next;

}

return P; //返回线性表L的最后一个结点,若为空表则返回NULL

}

LNode NewLNode(ElemType X)//构造一个数据域为X的新结点

{

LNode S;

S = (LNode)malloc(sizeof(struct Node))//为新结点分配空间

if(!S)

{

printf("Out of space!");

return NULL;

}

S->data = X;

S->next = NULL;

return S;//返回新结点

}

//线性表L已存在。 操作结果:在线性表L中寻找值为X的结点,若找到则返回该结点的前驱,否则返回NULL。

LNode FindPrefious(ElemType X, LinkList L)

{

LNode P = L;

while(P->next && P->next->data != X)//遍历链表寻找值为X的结点

P = P->next;

if(!P->next) //如果找不到值为X的结点,返回NULL

return NULL;

else //若找到则返回该结点的前驱P

return P;

}

void ListDelete(LNode Pre)//初始条件:线性表L中结点P已找到。 操作结果:删除该结点。

{

LNode P = Pre->next;

Pre->next = P->next;

free(P);

}

//初始条件:线性表L中结点P已找到,新结点S已构造。。操作结果:在该结点之前插入新结点X。

void ListInsert(LNode Pre, LNode S)

{

S->next = Pre->next;

Pre->next = S;

}

//-------------------------------------------------------------------------------
//函数种类
/* void dakai(int n,int j,char ch);
void save(int n,char ch);
void display(int n,char ch);//显示信息
void xiugai();
void dakai(int n,int j,char ch);//查找文件
void shuru(int n,char ch);//输入信息
void paixu(int n,char ch);
void xuanzhe(int n,char ch);//选择运行程序*/

虽然在网络上提出求助,但是还是应该自己亲自体会体会写一写练。