请求帮助

three1103 2002-06-07 05:50:41
请你编一个c或c++程序;要求如下:
文件student(二进制)存放了已初始化好的四个链表节点,节点结构体定义如下:
struct student
{int number;
char name[15];
student *next;}
已初始化好的四个节点,每个包括student.number(学生学号), student.name(学生姓名),next指针设为NULL.
3 从文件student中依次读出四个节点,连成链表,按学号大小排序.
4 定义add(),del(),print()函数,分别实现对链表节点的插入、删除、输出。
或帮我改一下我的程序:
#include "iostream.h"
#include "stdio.h"
#include "iomanip.h"
#include "string.h"
typedef struct student
{short number;char name[15];student *next;}students;
void add(short a,char *x,students *head)
{students *pr,*p=new students;p->number=a;strcpy(p->name,x);p->next=NULL;
for(pr=head;pr->next!=NULL;pr=pr->next);pr->next=p;
}
students * del(short a,students *head)
{students *p,*pr;
if(head->number==a){p=head;head=head->next;delete p;}
for(p=head->next,pr=head;p!=NULL;p=p->next,pr=pr->next)
if(p->number==a){pr->next=p->next;delete p;p=pr->next;}
else cout<<"The number is error\n";return head;
}
void print(students *head)
{students *p,*pr,*k1;
while(head->next!=NULL)
{short k=head->number;k1=head;
for(pr=head,p=head->next;p!=NULL;pr=pr->next,p=p->next)
if(k>p->number) {k=p->number;k1=p;}
cout<<setw(10)<<k<<k1->name<<endl;
if(k1==head)head=head->next;
else pr->next=p->next;
delete k1;
}
cout<<setw(10)<<head->number<<head->name<<endl;delete head;
}
void main()
{students *p,*pr,*head;
FILE *in;
if((in=fopen("students","rb"))==NULL)
cout<<"can not open students-file"<<endl;
head=new students;fread(head,19,1,in);pr=head;
for(int i=1;i<4;i++)
{p=new students;fread(p,19,1,in);pr->next=p;pr=p;}
fclose(in);
for(p=head;p!=NULL;p=p->next)
cout<<setw(10)<<p->number<<p->name<<endl;
cout<<"D or d------------delete\n"<<"A or a------------add\n"
<<"N or n------------no adding no deleting\n"
<<"Please enter your choose\n";
char ch=getchar();
if(ch=='d'||ch=='D')
{cout<<"Please enter the number you want to delete\n";short a;cin>>a;head=del(a,head);}
if(ch=='a'||ch=='A')
{cout<<"Please enter student's massage\n";
int b;cin>>b;char ch1[15];cin>>ch1;add(b,ch1,head);
}
for(p=head;p!=NULL;p=p->next)
cout<<setw(10)<<p->number<<p->name<<endl;
//print(head);
}
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoluoli 2002-06-07
  • 打赏
  • 举报
回复
哥们,你的程序太乱了!!
#include "iostream.h"
#include "stdio.h"
#include "iomanip.h"
#include "string.h"
typedef struct student{
short number;
char name[15];
student *next;
}students;
void add(short a,char *x,students *head){
students *pr;
students *p=new students;
p->number=a;
//strcpy(p->name,x);
p->next=NULL;
for(pr=head;pr->next!=NULL;pr=pr->next)//;
pr->next=p;
}
students* del(short a,students *head){
students *p=head,*pr;
//while(p){
// if(p->next->number==a){
//p->next=p->next->next;
//delete p;
// }
// p=p->next;
//}
for(p=head->next,pr=head;p!=NULL;p=p->next,pr=pr->next)
if(p->number==a){
pr->next=p->next;
delete p;
p=pr->next;
return head;

}


cout<<"The number is error\n";
return head;
}
void print(students *head){
students *p,*pr,*k1;
while(head->next!=NULL){
short k=head->number;
k1=head;
for(pr=head,p=head->next;p!=NULL;pr=pr->next,p=p->next)
if(k>p->number) {
k=p->number;
k1=p;
}
cout<<setw(10)<<k<<k1->name<<endl;
if(k1==head)
head=head->next;
else
pr->next=p->next;
delete k1;
}
cout<<setw(10)<<head->number<<head->name<<endl;
delete head;
}




void main(){
students *p,*pr,*head;
FILE *in;
if((in=fopen("students","rb"))==NULL)
cout<<"can not open students-file"<<endl;
head=new students;
fread(head,19,1,in);
pr=head;
for(int i=1;i<4;i++){
p=new students;
fread(p,19,1,in);
pr->next=p;pr=p;
}
fclose(in);
//for(p=head;p!=NULL;p=p->next)//这里有错
//cout<<setw(10)<<p->number<<p->name<<endl;
cout<<"D or d------------delete\n"<<"A or a------------add\n"
<<"N or n------------no adding no deleting\n"
<<"Please enter your choose:\n";
char ch=getchar();
if(ch=='d'||ch=='D'){
cout<<"Please enter the number you want to delete\n";
short a;
cin>>a;head=del(a,head);
}
if(ch=='a'||ch=='A'){
cout<<"Please enter student's massage\n";
int b;
cin>>b;
char ch1[15];
cin>>ch1;
add(b,ch1,head);
}
for(p=head;p!=NULL;p=p->next)
cout<<setw(10)<<p->number<<p->name<<endl;
//print(head);
}
你自己再好好看看吧!!!!
xiaoluoli 2002-06-07
  • 打赏
  • 举报
回复
先送你一个:
#include"stdio.h"
#include"stdlib.h"
#define null 0
#define overflow -2
#define ok 1
#define error 0
typedef int elemtype;
typedef int status;
typedef struct lnode{
elemtype data;
struct lnode *next;
}*list;
typedef struct{
list head;
list tail;
int len;
}linklist;
int n=0;list di;
status initlist(list &li){
li=(list)malloc(sizeof(lnode));
di=li;
if(!li) return overflow;
else
li->next=null;
return ok;
}//init
status destroylist(list &l){
int i=0;
list p;
for(int j=1;j<=n&&l->next!=null;j++){
p=l->next;
free(l);
l=p;
}
n=0;
return ok;
}//destroy
status getlist(list &l){
if(l!=di)
{printf("sorry!你没有创建链表.\n");return overflow;}
char b;
list q;
list p;
q=l;
do {
p=(list)malloc(sizeof(lnode));
printf("请输入内容:");
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;
n++;
printf("现有%d个元素,是否继续键入:y/n\n",n);
scanf("%s",&b);
}while (b!='n');
return ok;
}//get
status insertlist(list &l,elemtype &e){
if(l!=di){
printf("sorry!你没有创建链表.\n");
return overflow;
}
int i;
list p=l;//
if(!(p->next)){//
printf("此表为空\n");return overflow;//
}//
printf("输插入位置i前:");
scanf("%d",&i);
printf("输插入元素内容:");
scanf("%d",&e);
//p=l;
list s;
int j=1;//int j=1;
while (p&&j<i){
p=p->next;j++;
}
if (!p||j>i) return error;
s=(list)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
n++;
return ok;
}//linkinsert
status deletelist(list &l,elemtype &e){
if(l!=di)
{printf("sorry!你没有创建链表.\n");return overflow;}
printf("键入删除位置i:");
int i;
scanf("%d",&i);
list p=l;
list q;
int j=0;
while(p->next && j<i-1){
p=p->next;++j;
}
if(!(p->next)||j>i-1) return error;
q=p->next; p->next=q->next;
e=q->data;
n--;
free(q);
return ok;
}//listdelete
status printlist(list &lp){
if(lp!=di)
{printf("sorry!你没有创建链表.\n");return overflow;}
int i=0;
list q=lp;
if(q->next==null) printf("此链表为空.\n");
for(int j=1;j<=n&&q->next!=null;j++){
i++;q=q->next;
printf("第%d个数:%d\n", i,q->data);
} return ok;
}//printlist
status searchlist(list &l){
if(l!=di){
printf("sorry!你没有创建链表.\n");
return overflow;
}
printf("请输入查找的序号:");
int i;
scanf("%d",&i);
list p=l;
if(i<=0||i>n) {printf("sorry!查找超出范围\n");return error;}
for (int j=0;j<i;j++)
p=p->next;
printf("找的第%d个元素为%d\n",i,p->data);
return ok;
}//searchlist
void main(){
int m,a,t;
elemtype e;
list l;
do {
printf("请选择:\n\t1建立空链表\n\t2摧毁链表.\n\t3链表键入.\n\t4插入链表.\n");
printf("\t5删除链表.\n\t6查找链表.\n\t7输出链表.\n\t8退出链表.\n\n");
scanf("%d",&m);
switch (m){
case 1 : a=initlist(l);
if(a==ok) printf("空链表分配成功!\n");
else printf("空链表分配失败!\n");break;
case 2 : destroylist(l);
printf("链表已被摧毁,是否重新建立新空链表:y/n?\n");
char k;
int a;
scanf("%s",&k);
if(k!='n') {a=initlist (l);
if(a==ok) printf("空链表分配成功!\n");
else printf("空链表分配失败!\n");
break;
}
exit(overflow);

case 3 : getlist(l);
break;
case 4 : t=insertlist(l,e);
if (t==ok)
printf("已插入元素为:%d\n现有%d个元素\n",e,n);
if(t==error) printf("sorry!输入位置不当。\n");
break;
case 5 : t=deletelist(l,e);
if(t==1){
printf("删除元素内容为:%d\n",e,n);
printf("现有%d个元素.\n",n);
}
if(t==error) {
printf("sorry!无此元素。\n");
printf("现有%d个元素.\n",n);
}
break;
case 6 : searchlist(l);
break;
case 7 : printlist(l);
break;
case 8 : exit(1);
default : printf("error\n");
}
}while(1);
}
leasun 2002-06-07
  • 打赏
  • 举报
回复
如果是作业的话你应该自己完成

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧