自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1)
  • 资源 (2)
  • 收藏
  • 关注

转载 让你不再害怕指针(转载)

要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下

2011-10-10 22:11:45 296

停车场管理系统

栈,链队列的基本应用。 #include #include #define Size 3//停车场的容量 #define Price 0.1//每分钟的价钱 #define Null 0 typedef struct time//定义时间 { int hour;//小时 int min;//分钟 }Time;//时间结点 typedef struct { int car_number;//车牌号 int number; Time arrivetime,leavetime;//到达时间,离开时间 int fee;//所需费用 }car_info;//车辆的信息结点 typedef struct { car_info *north;//车场北 car_info *south;//车场南 int number;//停车数量 int car_number; }car_park;//停车场 typedef struct { car_info *west;//车场西 car_info *east;//车场东 int number;//停车数量 }car_park_back;//倒车道 typedef struct car//链队列的定义 { car_info data;//数据域 struct car *next; //指针域 }carnode; typedef struct node { carnode *head;//头结点 carnode *rear;//尾结点 int number;//停车数量 }car_park_temp;//便道 void init_car_park(car_park *cp)//停车场初始化 { cp->north=(car_info *)malloc(Size * sizeof(car_info));//申请空间 if(!cp->north) printf("error\n");//申请空间失败 cp->south=cp->north; cp->number=0;//构造一个空栈 } void enter_car_park(car_park *cp,car_info *car)//进入停车场 { *cp->south++=*car; cp->number++; //修改当前栈顶指针 } int notfull_car_park(car_park *cp) //判断停车场是否有空位 { int e; if(cp->south-cp->north>=Size) //从南到北的车辆数为5,则停车场已满 e=0; //停车场满返回0 else e=1; //停车场未满返回1 return(e); } int notempty_car_park_back(car_park_back *cpb) //判断倒车道是否还有车 { int e; if(cpb->east==cpb->west)//倒车道为空 e=0; //返回0 else e=1; //倒车道有车返回1 return(e); } void back_car_park(car_park *cp,car_info *car) //从停车场倒车 { *car=*cp->south; cp->number--; } void init_car_park_back(car_park_back *cpb)//初始化倒车道 { cpb->west=(car_info *)malloc(Size *sizeof(car_info));//申请空间 if(!cpb->west) printf("error\n");//申请空间失败 cpb->east=cpb->west; cpb->number=0;//构造一个空栈 } void enter_car_park_back(car_park_back *cpb,car_info *car)//进入倒车道 { *cpb->east++=*car; cpb->number++;//修改当前的栈顶指针 } void leave_car_park_back(car_park_back *cpb,car_info *car)//离开倒车道 { *car=*--cpb->east; cpb->number--; } void init_car_park_temp(car_park_temp *cpt)//初始化便道 //将cpt初始化为一个空的链队列 { cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode));//申请空间 cpt->head->next=Null; cpt->number=0; } void enter_car_park_temp(car_park_temp *cpt,car_info *car) //进入便道 //将数据元素car插入到队列cpt中 { carnode *p; p=(carnode *)malloc(sizeof(carnode));//申请结点p p->data=*car; p->next=Null; cpt->head->next=p; cpt->rear=p; cpt->number++; } void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp) //离开便道,将队列cpt的队头元素出队 { carnode *p; p=cpt->head->next; *car=p->data; cpt->head=p->next; //队头元素p出队 enter_car_park(cp, car);//调用进入停车场的函数 cpt->number--; //便道的车辆少1 } int notempty_car_park_temp(car_park_temp *cpt) //判断便道是否还有车 { int e; if(cpt->head==cpt->rear) e=0; //便道为空则返回0 else e=1; //便道不空则返回1 return(e); } void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb) //某车离开停车场,并计算该车的费用 { int e, a1,a2,b1,b2,t; car_info *car1,*car2,*car3;//三辆车的信息 car1=(car_info *)malloc(sizeof(car_info));//为第一辆车申请空间 car2=(car_info *)malloc(sizeof(car_info));//为第二辆车申请空间 car3=(car_info *)malloc(sizeof(car_info));//为第三辆车申请空间 while((--cp->south)->car_number!=car->car_number)//从停车场倒车 { back_car_park(cp,car1);//出停车场 enter_car_park_back(cpb,car1);//进入倒车道 } car->arrivetime.hour=cp->south->arrivetime.hour;car->arrivetime.min=cp->south->arrivetime.min; a1=car->arrivetime.hour; a2=car->arrivetime.min; b1=car->leavetime.hour; b2=car->leavetime.min; t=(b1-a1)*60+(b2-a2);//计算车辆在停车场停留的时间 car->fee=t*Price;//计算车辆应交的费用 printf("\n车辆停留的时间是: %3d min\n",t);//输出车辆停留的时间 printf("\n应交的费用是 %3d 元\n",car->fee);//输出车辆应交的费用 e=notempty_car_park_back(cpb);//判断车道是否为空 while(e==1) { leave_car_park_back(cpb,car2); enter_car_park(cp,car2); e=notempty_car_park_back(cpb); }//离开倒车道,进入停车场 cp->number--; } void List1(car_park *cp) /*列表显示车场信息*/ {int a; int b; int i; if(cp->number>0) /*判断车站内是否有车*/ { for( i=0;inumber;i++) { cp->south--; a=cp->south->car_number; b=cp->number-i; printf("\n位置%d",b); printf("\n车牌号%d",a); } } else printf("\n车场里没有车"); } void List2(car_park_temp *cpt) /*列表显示便道信息*/ { int a; int b; if(cpt->number>0) { a=cpt->number; b=cpt->head->data.car_number; printf("\n便道里有%d辆车",a); printf("\n车牌号为:%d",b); } else printf("\n便道里没有车"); } void main() { char ch; int e,n; //QueueNode *p; car_park_back *cpb; car_park *cp; car_park_temp *cpt; car_info *car; cp=(car_park *)malloc(sizeof(car_park)); cpb=(car_park_back *)malloc(sizeof(car_park)); cpt=(car_park_temp *)malloc(sizeof(car_park_temp)); init_car_park(cp); //初始化停车场 init_car_park_back(cpb);//初始化倒车道 init_car_park_temp(cpt);//初始化便道 do { car=(car_info *)malloc(sizeof(car_info)); printf("\n\n************ 模拟停车场管理问题***************\n\n"); printf("请选择你的操作 \n'A' 到达\n'L'离开\n'C'查看停车场信息 \n'D'查看便道信息\n'0'退出:\n"); scanf("%s",&ch); e=notfull_car_park(cp); switch(ch) { case'A':if(e==1)//停车场未满 { printf("请输入车牌号:\n"); scanf("%d",&car->car_number); printf("请输入到达时间,hour min:\n"); scanf("%d %d",&(*car).arrivetime.hour,&(*car).arrivetime.min); enter_car_park(cp,car);//进入停车场 printf("此车在停车场中,位置在: %d\n",cp->number); } else//停车场已满 { car_info *car; car=(car_info*)malloc(sizeof(car_info)); printf("请输入车牌号:\n"); scanf("%d",&car->car_number);//进入便道 enter_car_park_temp(cpt,car); printf("停车场已满,车在便道中,位置是: %d\n",cpt->number); } break; case 'L': printf("请输入车牌号:\n"); scanf("%d",&car->car_number); printf("请输入离开时间hour min:\n"); scanf("%d %d",&(*car).leavetime.hour,&(*car).leavetime.min); leave_car_park(cp,car,cpb);//离开停车场 n=notempty_car_park_temp(cpt);//判断便道车辆是否为空 if(n==1)//便道上有车辆 leave_car_park_temp(cpt,car,cp);//离开便道 break; case'C': List1(cp); break; case'D': List2(cpt); break; default:break; } }while(ch!='0');//退出系统 }

2011-10-12

银行小系统程序

#include #include #include #define M 30 typedef struct{ int elem[M]; //定义一个数组 int front; //定义头指针 int rear; //定义尾指针 int length;//定义长度 }Queue; init(Queue *s) { s->front =-1;//首尾指针都为-1,长度为0 s->rear =-1; s->length =0; } int inQueue(Queue *s,int n)//在队列的尾部进行插入(考虑到队列长度和在哪里插入的问题) { if(s->length >= M) { printf("队列太长,请稍后!"); return 0; } s->rear ++;//尾指针后移 s->elem [s->rear ]=n; if(s->front ==-1) //如果没有元素,就把头指针后移 { s->front ++; } s->length ++; //每加入一个元素,队列的长度都要加1 return 1; } int outQueue(Queue *s )//把头指针后移,然后长度减1 { int n; if(s->length ==0) printf("没有人排队!"); else { n=s->elem [s->front ]; s->front ++; s->length --; printf("前面的%d已经服务好",n); return 1; } } void print( Queue *s) { printf("你的排队号码是%d",s->elem [s->front ]); } void show() { printf("*******欢迎来到银行系统********\n"); printf("1: 请您到取号机取号码,根据号码排队 \n"); printf("2: 办理完成,下一位\n"); printf("3: 退出\n"); printf("**************************\n"); } void main() { Queue q;int x=0;char ch; init(&q); while(1) { show(); ch=getchar(); switch(ch) { case '1': printf("你的排队号码是%d",++x); if(x>M) printf("现在排队的人太多,请稍候!"); inQueue(&q,x); ch=getchar(); break; case '2':outQueue(&q); ch=getchar(); break; case '3':exit(0); ch=getchar(); break; default:printf("输入命令错误,请重新输入!"); ch=getchar(); } } }

2011-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除