锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
//stack.h
#define STACK_INIT_SIZE 100 //瀛樺偍絀洪棿鍒濆閲?BR>#define STACK_INCREMENT 10//瀛樺偍絀洪棿鍒濆澧為噺
typedef struct
{
int r;
int c;
}PostType;//鍧愭爣浣嶇疆 榪峰鐨剅琛宑鍒?BR>typedef struct
{
int ord;//閫氶亾鍧楀湪璺緞涓婄殑搴忓彿
PostType seat;//閫氶亾鍧楃殑褰撳墠鍧愭爣浣嶇疆
int di;//閫氶亾鍧楁寚鍚戜笅涓閫氶亾鍧楃殑鏂瑰悜
}SElemType;//鏍堝厓绱犵殑綾誨瀷
typedef struct
{
SElemType *base;//鏍堝簳鎸囬拡
SElemType *top;//鏍堥《鎸囬拡
int stacksize;//鏍堢殑鏈澶у閲?BR>}Stack;//鏍堢殑綾誨瀷
Status InitStack(Stack &S)//鍒濆鍖栨爤
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);//瀛樺偍鍒嗛厤澶辮觸;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
Status StackEmpty(Stack S)
//鍒ゆ柇鏍堟槸鍚︿負絀?濡傛灉涓虹┖榪斿洖TRUE,鍚﹀垯榪斿洖FALSE
{
if(S.top==S.base)
return TRUE;
return FALSE;
}//StackEmpty
Status Push(Stack &S,SElemType e)
//鎻掑叆鍏冪礌涓篹鐨勬爤欏跺厓绱?BR>{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCREMENT;
}
*S.top++=e;
return OK;
}//Push
Status Pop(Stack &S,SElemType &e)
//鍒犻櫎鏍堥《鍏冪礌瀛樺叆e
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}//Pop
Status DestroyStack(Stack &S)
//閿姣佹爤
{
free(S.base);
S.top=S.base;
return OK;
}//DestroyStack
//maze.cpp
#define MAXLEN 20//榪峰鍖呮嫭澶栧鏈澶ц鍒楁暟鐩?BR>typedef struct{
int r;
int c;
char adr[MAXLEN][MAXLEN];//鍙彇' ''*' '@' '#'
}MazeType; //榪峰綾誨瀷
Status InitMaze(MazeType &maze){
//鍒濆鍖栬糠瀹嫢鎴愬姛榪斿洖TRUE,鍚﹀垯榪斿洖FALSE
int m,n,i,j,k=1;
printf("杈撳叆榪峰彛鐨勮鏁板拰鍒楁暟: ");
scanf("%d%d",&maze.r,&maze.c); //榪峰琛屽拰鍒楁暟
for(i=0;i<=maze.c+1;i++){//榪峰琛屽澧?BR> maze.adr[0][i]='#';
maze.adr[maze.r+1][i]='#';
}//for
for(i=0;i<=maze.r+1;i++){//榪峰鍒楀澧?BR> maze.adr[i][0]='#';
maze.adr[i][maze.c+1]='#';
}
for(i=1;i<=maze.r;i++)
for(j=1;j<=maze.c;j++)
maze.adr[i][j]=' ';//鍒濆鍖栬糠瀹?BR> printf("杈撳叆闅滅鐗?d鐨勫潗鏍?浠ュ潗鏍?0,0)緇撴潫杈撳叆): ",k);
scanf("%d%d",&m,&n);//鎺ユ敹闅滅鐨勫潗鏍?BR> k++;
while(m!=0)
{
if(m>maze.r || n>maze.c)//瓚婄晫
exit(ERROR);
maze.adr[m][n]='#';//榪峰闅滅鐢?#'鏍囪
printf("杈撳叆闅滅鐗?d鐨勫潗鏍?浠ュ潗鏍?0,0)緇撴潫杈撳叆): ",k);
scanf("%d%d",&m,&n);
k++;
}
return OK;
}//InitMaze
Status Pass(MazeType maze,PostType curpos){
//褰撳墠浣嶇疆鍙氬垯榪斿洖TURE,鍚﹀垯榪斿洖FALSE
if(maze.adr[curpos.r][curpos.c]==' ')//鍙?BR> return TRUE;
else
return FALSE;
}//Pass
Status FootPrint(MazeType &maze,PostType curpos){
//鑻ヨ蛋榪囧茍涓斿彲閫氳繑鍥濼RUE,鍚﹀垯榪斿洖FALSE
//鍦ㄨ繑鍥炰箣鍓嶉攢姣佹爤S
maze.adr[curpos.r][curpos.c]='*';//"*"琛ㄧず鍙?BR> return OK;
}//FootPrint
PostType NextPos(PostType &curpos,int i){
//鎸囩ず騫惰繑鍥炰笅涓浣嶇疆鐨勫潗鏍?BR> PostType cpos;
cpos=curpos;
switch(i){ //1.2.3.4鍒嗗埆琛ㄧず涓?鍗?瑗?鍖楁柟鍚?BR> case 1 : cpos.c+=1; break;
case 2 : cpos.r+=1; break;
case 3 : cpos.c-=1; break;
case 4 : cpos.r-=1; break;
default: exit(ERROR);
}
return cpos;
}//Nextpos
Status MarkPrint(MazeType &maze,PostType curpos){
//鏇捐蛋榪囦絾涓嶆槸閫氳礬鏍囪騫惰繑鍥濷K
maze.adr[curpos.r][curpos.c]='@';//"@"琛ㄧず鏇捐蛋榪囦絾涓嶉?BR> return OK;
}//MarkPrint
void PrintMaze(MazeType &maze)
//灝嗘渶鍚庢爣璁板ソ鐨勮糠瀹緭鍑?BR>{
int i,j;
printf("\n杈撳嚭榪峰鐨勮礬寰?\n");
for(i=0;i<=maze.c+1;i++)
printf("%4d",i);//杈撳嚭鍒楁暟
printf("\n");
for(i=0;i<=maze.r+1;i++)
{
printf("%d",i);//杈撳嚭琛屾暟
for(j=0;j<=maze.c+1;j++)
printf("%4c",maze.adr[i][j]);//杈撳嚭榪峰
printf("\n");
}
}//PrintMaze
Status MazePath(MazeType &maze,PostType start,PostType end)
//鑻ヨ糠瀹粠鍏ュ彛start鍒癳nd鐨勯氶亾鍒欐眰寰椾竴鏉″瓨鏀懼湪鏍堜腑
{
Stack S;//鍒濆鍖栨爤
PostType curpos;
int curstep;
SElemType e;
InitStack(S);
curpos=start;
curstep=1;
do
{
if(Pass(maze,curpos))//褰撳墠浣嶇疆鍙氳繃鑰屾湭鏇捐蛋榪囩暀涓嬭凍榪?BR> {
FootPrint(maze,curpos);
e.ord=curstep;e.seat=curpos;e.di=1;
Push(S,e);//鍔犲叆鏍堣礬寰勪腑
if(curpos.r==end.r && curpos.c==end.c)//鍒拌揪鍑哄彛榪斿洖TRUE
{
if(!DestroyStack(S))
exit(OVERFLOW);
else return TRUE;
}
else
{
curpos=NextPos(curpos,1);//涓嬩竴浣嶇疆鏄綋鍓嶄綅緗?BR> curstep++;//鎺㈢儲涓嬩竴姝?BR> }
}//if
else//褰撳墠浣嶇疆涓嶈兘閫氳繃
{
if(!StackEmpty(S))
{
Pop(S,e);//鎻愬彇鍓嶄竴浣嶇疆
while (e.di==4 && !StackEmpty(S))//4涓柟鍚戦兘涓嶈兘閫氳繃鍒欑暀涓嬭鍙稝 鎻愬彇鍓嶄竴涓綅緗繘琛屽垽鏂槸鍚︽槸鑳介氳繃
{
MarkPrint(maze,e.seat);
Pop(S,e);
}
if(e.di<4)//鎹笅涓涓柟鍚戞帰绱?nbsp; 璁懼畾褰撳墠浣嶇疆涓鴻鏂版柟鍚戜笂鐨勯偦浣?nbsp;
{
e.di++;
Push(S,e);
curpos=NextPos(e.seat,e.di);
}
}//if
}
}while(!StackEmpty(S));
if(!DestroyStack(S))
exit(ERROR);
else return FALSE;
}//MazePath
void main()
{
MazeType maze;
PostType start,end;
char c;
do
{
printf("----------鎵句竴鏉¤糠瀹殑璺緞-------------\n");
if(!InitMaze(maze))
{
printf("\n 鍒濆鍖栬糠瀹け璐?!!");
exit(ERROR);
}
do
{
printf("\n璇瘋緭鍏ュ叆鍙g殑鍧愭爣:");
scanf("%d%d",&start.r,&start.c);//杈撳叆鍏ュ彛鍧愭爣
if(start.r>maze.r || start.c>maze.c)
printf("\n杈撳叆閿欒,璇烽噸鏂拌緭鍏ュ叆鍙g殑鍧愭爣!!\n");
continue;
}
while (start.r>maze.r || start.c>maze.c);
do
{
printf("\n璇瘋緭鍏ュ嚭鍙g殑鍧愭爣:");//杈撳叆鍑哄彛鐨勫潗鏍?BR> scanf("%d%d",&end.r,&end.c);
if(end.r>maze.r || end.c>maze.c)
printf("\n杈撳叆閿欒,璇烽噸鏂拌緭鍏ュ嚭鍙e潗鏍?!\n");
continue;
}
while (end.r>maze.r || end.c>maze.c);
if(!MazePath(maze,start,end))
printf("\n涓嶈兘鎵懼埌涓鏉¤礬寰?!!\n");
else PrintMaze(maze);//杈撳嚭榪峰
printf("鏄惁瑕佺戶緇?(y/n):");
scanf("%s",&c);
}
while (c=='y' || c=='Y');
}//main
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define ERROR 0
#define OK 1
typedef struct{
int OccurTime;
int NType;
}Event;
typedef struct{
int ArrivalTime;
int Duration;
}QElemType;
struct LNODE
{
Event data;
struct LNODE *next;
};
typedef struct LNODE LNode;
typedef struct LNODE *LinkList;
typedef struct LNODE *EvenList;
typedef struct QNode{
QElemType elem;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{ QueuePtr front;
QueuePtr rear;
}LinkQueue;
EvenList ev;
Event en;
LinkQueue q[5];
QElemType customer;
int TotalTime,CustomerNum,CloseTime;
int InitList(EvenList *L)
{
*L=(LNode *)malloc(sizeof(LNode));
if(!(*L)) exit(ERROR);
(*L)->next=NULL;
return OK;
}
int DelFirst(EvenList *L,Event *e)
{ LNode *pc,*q;
pc=*L;q=pc->next;
pc->next=q->next;*e=q->data;return OK;}
int ListEmpty(LNode L)
{LNode *p;
int j=0;
p=L.next;
while(p)
{j++;break;}
if(j==0) return 1;
else return 0;
}
int compare(Event a,Event b)
{ if(a.OccurTime>b.OccurTime) return 1;
else if(a.OccurTime==b.OccurTime) return 0;
else return -1;
}
int OrderInsert(EvenList *L,Event e,int (* cmp)(Event ,Event ))
{ LNode *p,*pc;/*鎶婁簨浠舵彃鍏ラ摼琛?/
p=(LNode *)malloc(sizeof(LNode));/*鍒嗛厤絀洪棿*/
if(!p) { printf("not"); return(0);}
if(ListEmpty(**L))
{ p->data=e;p->next=(*L)->next;(*L)->next=p;}
else {
switch(cmp(((*L)->next)->data,e))
{case -1:pc=(*L)->next;
while(pc->next!=NULL)
{
if((pc->next)->data.OccurTime<=e.OccurTime)
pc=pc->next;
else break;
}
p->data=e;p->next=pc->next;/*鎶婂畠鎺ュ湪姣斿畠澶х殑鍓?/
pc->next=p;break;
case 0:pc=(*L)->next;/*鐩哥瓑鏃訛紝鎺ュ湪鐩哥瓑鐨勫悗闈?/
p->data=e;p->next=pc->next;
pc->next=p;break;
case 1:p->data=e;p->next=(*L)->next;
(*L)->next=p;break;/*灝忎簬鏃訛紝鎺ュ湪鏈鍓嶉潰*/
}}
return 1;
}
void DestroyList(EvenList *L)/*閿姣佽〃*/
{LNode *p;
while(*L)
{p=(*L)->next;free(*L);*L=p;}
}
int InitQueue(LinkQueue *Q)/*鍒濆鍖栭槦鍒?/
{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front) exit(0);
(Q->front)->next=NULL;
return OK;
}
int DestroyQueue(LinkQueue *Q)/*閿姣侀槦鍒?/
{ while(Q->front)
{ Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
return OK;
}
int EnQueue(LinkQueue *Q,QElemType e)/*鎻掑湪闃熸渶鍚?/
{QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->elem=e;p->next=NULL;
(Q->rear)->next=p;
Q->rear=p;/*閲嶆柊璁劇疆闃熷熬*/
return OK;
}
int QueueEmpty(LinkQueue Q)
{ if(Q.front==Q.rear) return OK;
else return 0;}
int DelQueue(LinkQueue *Q,QElemType *e)/*鍒犻櫎闃熺殑絎竴涓厓绱?/
{QueuePtr p;
if(QueueEmpty(*Q)) return ERROR;
p=(Q->front)->next;
*e=p->elem;
(Q->front)->next=p->next;
if(Q->rear==p) Q->rear=Q->front;
free(p);
return OK;
}
void GetHead(LinkQueue Q,QElemType *a)
{QNode *p;
if(Q.front==Q.rear) exit(0);
p=(Q.front)->next;
*a=p->elem;
}
int QueueLength(LinkQueue Q)/*闃熺殑闀垮害*/
{ int i=0;
QNode *pc;
if(Q.front==Q.rear) return 0;
pc=Q.front;
while(pc->next)
{i++;pc=pc->next;}
return i;
}
int Mininum(LinkQueue *Q)/*姹傞暱搴︽渶鐭殑闃?/
{ int a[4],e,j,i;
for(i=1;i<=4;i++)
a[i-1]=QueueLength(Q[i]);
e=a[0];j=1;
for(i=1;i<=3;i++)
if(e>a[i]) {e=a[i];j=i+1;}
return j;
}
void OpenForDay()/*鍒濆鍖栨搷浣?/
{ int i;
TotalTime=0;CustomerNum=0;/*鍒濆鍖栫瘡璁℃椂闂村拰瀹㈡埛鏁?/
InitList(&ev);
en.OccurTime=0;en.NType=0;/*璁懼畾絎竴涓鎴峰埌杈句簨浠?/
OrderInsert(&ev,en,compare);/*鎶婂畠鎻掑叆浜嬩歡琛?/
for(i=1;i<=4;i++) InitQueue(&q[i]);/*緗┖闃熷垪*/
}
void Random(int *a,int *b)/*鐢熸垚闅忔満鏁幫紝a涓烘瘡涓鎴峰姙鐞嗘椂闂村湪30鍒嗛挓鍐咃紝
b 涓轟袱鐩擱殧瀹㈡埛鍒拌揪鐨勯棿闅旀椂闂翠笉瓚呰繃5鍒嗛挓*/
{ *a=0+rand()%30;*b=0+rand()%5;}
void CustomerArrived()/*澶勭悊瀹㈡埛鍒拌揪浜嬩歡*/
{int durtime,intertime,t,i,b;
++CustomerNum;/*璁板綍瀹㈡埛鏁?/
Random(&durtime,&intertime);
b=en.OccurTime;
t=en.OccurTime+intertime;/*涓嬩竴瀹㈡埛鍒拌揪鏃跺埢*/
if(t<CloseTime)
{en.OccurTime=t;en.NType=0;
OrderInsert(&ev,en,compare);
}
i=Mininum(q);/*姹傞槦鍒楁渶鐭?/
customer.ArrivalTime=b;customer.Duration=durtime;/*涓鴻鎻掑叆闃熺殑瀹㈡埛璁劇疆鍒拌揪鏃墮棿鍜屽姙鐞嗘墍闇鏃墮棿*/
EnQueue(&q[i],customer);
if(QueueLength(q[i])==1)
{en.OccurTime=b+durtime;en.NType=i;
OrderInsert(&ev,en,compare);/*璁懼畾絎琲 涓寮浜嬩歡騫舵彃鍏ヤ簨浠惰〃*/
}
}
void CustomerDeparture()/*澶勭悊瀹㈡埛紱誨紑浜嬩歡*/
{int i;
i=en.NType;DelQueue(&q[i],&customer);/*鍒犻櫎絎琲闃熷垪鐨勬帓澶村鎴?/
TotalTime+=en.OccurTime-customer.ArrivalTime;/*绱瀹㈡埛閫楃暀鏃墮棿*/
if(!QueueEmpty(q[i]))/*璁懼畾絎琲闃熷垪鐨勪竴涓皢瑕佺寮浜嬩歡騫舵彃鍏ヤ簨浠惰〃*/
{ GetHead(q[i],&customer);/*寰楀埌瀹冪殑璧勬枡*/
en.OccurTime+=customer.Duration;en.NType=i;
OrderInsert(&ev,en,compare);
}
}
void Bank_Simulation()
{
OpenForDay();/*鍒濆鍖?/
while(!ListEmpty(*ev))/*闈炵┖鏃訛紝鍒犳帀琛ㄩ噷鐨勭涓涓?/
{ DelFirst(&ev,&en);
if(en.NType==0)
CustomerArrived();/*鏄鎴瘋繕娌″姙鐞嗙殑錛屽氨澶勭悊鍒拌揪浜嬩歡*/
else CustomerDeparture();/*鍚﹀垯澶勭悊紱誨紑浜嬩歡*/
}
printf("The Average Time is %.2f\n",(float)TotalTime/CustomerNum);
}
void main()
{scanf("%d",&CloseTime);/*杈撳叆鍏抽棬鏃墮棿*/
Bank_Simulation();
getch();
}
浠ヤ笅鏄爤鐨勪竴浜涘熀鏈搷浣滐細
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} Sqstack;
int InitStack(Sqstack &S)
{
if(!(S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int DestroyStack(Sqstack &S)
{
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
int ClearStack(Sqstack &S)
{
S.top=S.base;
return OK;
}
int StackEmpty(Sqstack S)
{
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
int StackLength(Sqstack S)
{
return S.top-S.base;
}
int GetTop(Sqstack S,SElemType &e)
{
if(S.top>S.base)
{
e=*(S.top-1);
return OK;
}
else
return ERROR;
}
int Push(Sqstack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*(S.top)++=e;
return OK;
}
int Pop(Sqstack &S,SElemType &e)
{
if(S.top==S.base)
return FALSE;
e=*--S.top;
return OK;
}
int StackTraverse(Sqstack &S,SElemType (*visit)(SElemType))
{
while(S.top>S.base)
visit(*S.base++);
return OK;
}
1錛庢暟鍒惰漿鎹?/SPAN>:
灝嗕竴涓崄榪涘埗杞崲鎴愬叓錛屽崄鍏繘鍒舵暟銆?/SPAN>
typedef int SElemType; // 瀹氫箟鏍堝厓绱犵被鍨嬩負鏁村瀷
#include"c1.h"
//#include"c3-1.h" // 閲囩敤欏哄簭鏍?/SPAN>
#include"c2.cpp" // 鍒╃敤欏哄簭鏍堢殑鍩烘湰鎿嶄綔
/*void conversion()
{ // 瀵逛簬杈撳叆鐨勪換鎰忎竴涓潪璐?/SPAN>10榪涘埗鏁存暟錛屾墦鍗拌緭鍑轟笌鍏剁瓑鍊肩殑16榪涘埗鏁?/SPAN>
SqStack s;
unsigned n; // 闈炶礋鏁存暟
SElemType e;
InitStack(s); // 鍒濆鍖栨爤
printf("n(>=0)=");
scanf("%u",&n); // 杈撳叆闈炶礋鍗佽繘鍒舵暣鏁?/SPAN>n
while(n) // 褰?/SPAN>n涓嶇瓑浜?/SPAN>0
{
Push(s,n%16); // 鍏ユ爤n闄や互16鐨勪綑鏁?/SPAN>(16榪涘埗鐨勪綆浣?/SPAN>)
n=n/16;
}
while(!StackEmpty(s)) // 褰撴爤涓嶇┖
{
Pop(s,e); // 寮瑰嚭鏍堥《鍏冪礌涓旇祴鍊肩粰e
if(e<=9)
printf("%d",e);
else
printf("%c",e+55);
}
printf("\n");
}*/
void conversion()
{
Sqstack S;
unsigned N;
SElemType e;
InitStack(S);
scanf("%u",&N);
while(N)
{
Push(S,N%8);
N=N/8;
}
while(!StackEmpty(S))
{
Pop(S,e);
printf("%d",e);
}
}
void main()
{
conversion();
}
2.鎷彿閰嶅鐨勬楠?/SPAN>:
typedef char SElemType;
#include"c1.h"
#include"c2.cpp"
void matching()
{
Sqstack S;
InitStack(S);
char *p,a[100],e;
int state;
printf("璇瘋緭鍏ヤ竴緇勭鍙?/SPAN>(浠呭彧鑳藉惈鏈変笁縐?/SPAN>{},(),[]):");
gets(a);
p=a;
state=1;
while(*p && state)
{
if(!(*p=='{' || *p=='}' || *p=='[' || *p==']' || *p=='(' || *p==')'))
{
printf("杈撳叆涓嶆紜?/SPAN>!");
exit(ERROR);
}
switch (*p)
{
case '(':
case '{':
case '[':{
Push(S,*p++);
break;
}
case ')':{
GetTop(S,e);
if(!StackEmpty(S) && e=='(')
{
Pop(S,e);
p++;
}
else
state=0;
break;
}
case ']':{
GetTop(S,e);
if(!StackEmpty(S) && e=='[')
{
Pop(S,e);
p++;
}
else
state=0;
break;
}
case '}':{
GetTop(S,e);
if(!StackEmpty(S) && e=='{')
{
Pop(S,e);
p++;
}
else
state=0;
break;
}
}
}
if(StackEmpty(S) && state)
printf("杈撳叆鐨勬嫭鍙風浉絎﹀悎!");
else
printf("杈撳叆鐨勬嫭鍙蜂笉絎﹀悎!");
}
/*void check()
{ // 瀵逛簬杈撳叆鐨勪換鎰忎竴涓瓧絎︿覆錛屾楠屾嫭鍙鋒槸鍚﹂厤瀵?/SPAN>
Sqstack s;
SElemType ch[80],*p,e;
if(InitStack(s)) // 鍒濆鍖栨爤鎴愬姛
{
printf("璇瘋緭鍏ヨ〃杈懼紡\n");
gets(ch);
p=ch;
while(*p) // 娌″埌涓插熬
switch(*p)
{
case '(':
case '[':Push(s,*p++);
break; // 宸︽嫭鍙峰叆鏍堬紝涓?/SPAN>p++
case ')':
case ']':if(!StackEmpty(s)) // 鏍堜笉絀?/SPAN>
{
Pop(s,e); // 寮瑰嚭鏍堥《鍏冪礌
if(*p==')'&&e!='('||*p==']'&&e!='[') // 寮瑰嚭鐨勬爤欏跺厓绱犱笌*p涓嶉厤瀵?/SPAN>
{
printf("宸﹀彸鎷彿涓嶉厤瀵?/SPAN>\n");
exit(ERROR);
}
else
{
p++;
break; // 璺沖嚭switch璇彞
}
}
else // 鏍堢┖
{
printf("緙轟箯宸︽嫭鍙?/SPAN>\n");
exit(ERROR);
}
default: p++; // 鍏跺畠瀛楃涓嶅鐞嗭紝鎸囬拡鍚戝悗縐?/SPAN>
}
if(StackEmpty(s)) // 瀛楃涓茬粨鏉熸椂鏍堢┖
printf("鎷彿鍖歸厤\n");
else
printf("緙轟箯鍙蟲嫭鍙?/SPAN>\n");
}
}*/
void main()
{
//char a[]={[(]])]};
matching();
//check();
}
Status DestroyList(DuLinkList &L)
{ // 鎿嶄綔緇撴灉錛氶攢姣佸弻鍚戝驚鐜摼琛↙
DuLinkList q,p=L->next; // p鎸囧悜絎竴涓粨鐐?BR> while(p!=L) // p娌″埌琛ㄥご
{
q=p->next;
free(p);
p=q;
}
free(L);
L=NULL;
return OK;
}
Status ClearList(DuLinkList L) // 涓嶆敼鍙楲
{ // 鍒濆鏉′歡錛歀宸插瓨鍦ㄣ傛搷浣滅粨鏋滐細灝哃閲嶇疆涓虹┖琛?BR> DuLinkList q,p=L->next; // p鎸囧悜絎竴涓粨鐐?BR> while(p!=L) // p娌″埌琛ㄥご
{
q=p->next;
free(p);
p=q;
}
L->next=L->prior=L; // 澶寸粨鐐圭殑涓や釜鎸囬拡鍩熷潎鎸囧悜鑷韓
return OK;
}
Status ListEmpty(DuLinkList L)
{ // 鍒濆鏉′歡錛氱嚎鎬ц〃L宸插瓨鍦ㄣ傛搷浣滅粨鏋滐細鑻涓虹┖琛紝鍒欒繑鍥濼RUE錛屽惁鍒欒繑鍥濬ALSE
if(L->next==L&&L->prior==L)
return TRUE;
else
return FALSE;
}
int ListLength(DuLinkList L)
{ // 鍒濆鏉′歡錛歀宸插瓨鍦ㄣ傛搷浣滅粨鏋滐細榪斿洖L涓暟鎹厓绱犱釜鏁?BR> int i=0;
DuLinkList p=L->next; // p鎸囧悜絎竴涓粨鐐?BR> while(p!=L) // p娌″埌琛ㄥご
{
i++;
p=p->next;
}
return i;
}
Status GetElem(DuLinkList L,int i,ElemType &e)
{ // 褰撶i涓厓绱犲瓨鍦ㄦ椂,鍏跺艱祴緇檈騫惰繑鍥濷K,鍚﹀垯榪斿洖ERROR
int j=1; // j涓鴻鏁板櫒
DuLinkList p=L->next; // p鎸囧悜絎竴涓粨鐐?BR> while(p!=L&&j<i) // 欏烘寚閽堝悜鍚庢煡鎵?鐩村埌p鎸囧悜絎琲涓厓绱犳垨p鎸囧悜澶寸粨鐐?BR> {
p=p->next;
j++;
}
if(p==L||j>i) // 絎琲涓厓绱犱笉瀛樺湪
return ERROR;
e=p->data; // 鍙栫i涓厓绱?BR> return OK;
}
int LocateElem(DuLinkList L,ElemType e,Status(*compare)(ElemType,ElemType))
{ // 鍒濆鏉′歡錛歀宸插瓨鍦紝compare()鏄暟鎹厓绱犲垽瀹氬嚱鏁?BR> // 鎿嶄綔緇撴灉錛氳繑鍥濴涓1涓笌e婊¤凍鍏崇郴compare()鐨勬暟鎹厓绱犵殑浣嶅簭銆?BR> // 鑻ヨ繖鏍風殑鏁版嵁鍏冪礌涓嶅瓨鍦紝鍒欒繑鍥炲間負0
int i=0;
DuLinkList p=L->next; // p鎸囧悜絎?涓厓绱?BR> while(p!=L)
{
i++;
if(compare(p->data,e)) // 鎵懼埌榪欐牱鐨勬暟鎹厓绱?BR> return i;
p=p->next;
}
return 0;
}
Status PriorElem(DuLinkList L,ElemType cur_e,ElemType &pre_e)
{ // 鎿嶄綔緇撴灉錛氳嫢cur_e鏄疞鐨勬暟鎹厓绱狅紝涓斾笉鏄涓涓紝鍒欑敤pre_e榪斿洖瀹冪殑鍓嶉┍錛?BR> // 鍓嶉┍錛屽惁鍒欐搷浣滃け璐ワ紝pre_e鏃犲畾涔?BR> DuLinkList p=L->next->next; // p鎸囧悜絎?涓厓绱?BR> while(p!=L) // p娌″埌琛ㄥご
{
if(p->data==cur_e)
{
pre_e=p->prior->data;
return TRUE;
}
p=p->next;
}
return FALSE;
}
Status NextElem(DuLinkList L,ElemType cur_e,ElemType &next_e)
{ // 鎿嶄綔緇撴灉錛氳嫢cur_e鏄疞鐨勬暟鎹厓绱狅紝涓斾笉鏄渶鍚庝竴涓紝鍒欑敤next_e榪斿洖瀹冪殑鍚庣戶錛?BR> // 鍚﹀垯鎿嶄綔澶辮觸錛宯ext_e鏃犲畾涔?BR> DuLinkList p=L->next->next; // p鎸囧悜絎?涓厓绱?BR> while(p!=L) // p娌″埌琛ㄥご
{
if(p->prior->data==cur_e)
{
next_e=p->data;
return TRUE;
}
p=p->next;
}
return FALSE;
}
DuLinkList GetElemP(DuLinkList L,int i) // 鍙﹀姞
{ // 鍦ㄥ弻鍚戦摼琛↙涓繑鍥炵i涓厓绱犵殑浣嶇疆鎸囬拡(綆楁硶2.18銆?.19瑕佽皟鐢ㄧ殑鍑芥暟)
int j;
DuLinkList p=L;
for(j=1;j<=i;j++)
p=p->next;
return p;
}
Status ListInsert(DuLinkList L,int i,ElemType e) // 鏀硅繘綆楁硶2.18
{ // 鍦ㄥ甫澶寸粨鐐圭殑鍙岄摼寰幆綰挎ц〃L涓i涓綅緗箣鍓嶆彃鍏ュ厓绱爀錛宨鐨勫悎娉曞間負1鈮鈮よ〃闀?1
DuLinkList p,s;
if(i<1||i>ListLength(L)+1) // i鍊間笉鍚堟硶
return ERROR;
p=GetElemP(L,i-1); // 鍦↙涓‘瀹氱i-1涓厓绱犵殑浣嶇疆鎸囬拡p
if(!p) // p=NULL,鍗崇i-1涓厓绱犱笉瀛樺湪
return ERROR;
s=(DuLinkList)malloc(sizeof(DuLNode));
if(!s)
return OVERFLOW;
s->data=e; // 鍦ㄧi-1涓厓绱犱箣鍚庢彃鍏?BR> s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
return OK;
}
Status ListDelete(DuLinkList L,int i,ElemType &e) // 綆楁硶2.19
{ // 鍒犻櫎甯﹀ご緇撶偣鐨勫弻閾懼驚鐜嚎鎬ц〃L鐨勭i涓厓绱?i鐨勫悎娉曞間負1鈮鈮よ〃闀?1
DuLinkList p;
if(i<1||i>ListLength(L)) // i鍊間笉鍚堟硶
return ERROR;
p=GetElemP(L,i); // 鍦↙涓‘瀹氱i涓厓绱犵殑浣嶇疆鎸囬拡p
if(!p) // p=NULL,鍗崇i涓厓绱犱笉瀛樺湪
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
return OK;
}
void ListTraverse(DuLinkList L,void(*visit)(ElemType))
{ // 鐢卞弻閾懼驚鐜嚎鎬ц〃L鐨勫ご緇撶偣鍑哄彂,姝e簭瀵規瘡涓暟鎹厓绱犺皟鐢ㄥ嚱鏁皏isit()
DuLinkList p=L->next; // p鎸囧悜澶寸粨鐐?BR> while(p!=L)
{
visit(p->data);
p=p->next;
}
printf("\n");
}
void ListTraverseBack(DuLinkList L,void(*visit)(ElemType))
{ // 鐢卞弻閾懼驚鐜嚎鎬ц〃L鐨勫ご緇撶偣鍑哄彂,閫嗗簭瀵規瘡涓暟鎹厓绱犺皟鐢ㄥ嚱鏁皏isit()銆傚彟鍔?BR> DuLinkList p=L->prior; // p鎸囧悜灝劇粨鐐?BR> while(p!=L)
{
visit(p->data);
p=p->prior;
}
printf("\n");
}
int InitList(LinkList &L) //鍒濆鍖栦竴涓摼琛?BR> {
L=(LinkList)malloc(sizeof(Lnode));
if(!L)
exit(OVERFLOW);
L->next=NULL;
return OK;
}
int DestroyList(LinkList &L) //閿姣侀摼琛?BR> {
LinkList q;
while(L)
{
q=L->next;
free(L);
L=q;
}
return OK;
}
int ClearList(LinkList L) //娓呴浂鎿嶄綔
{
LinkList p,q;
q=L->next;
while(q)
{
p=q->next;
free(q);
q=p;
}
L->next=NULL;
return OK;
}
int ListEmpty(LinkList L) //鍒ょ┖鎿嶄綔
{
if(L->next==NULL)
return TRUE;
else
return FALSE;
}
int ListLength(LinkList L) //璁$畻閾捐〃鐨勯暱搴?BR> {
LinkList p;
int i=0;
p=L->next;
while(p)
{
++i;
p=p->next;
}
return i;
}
int GetElem(LinkList L,int i,ElemType e) //寰楀埌絎琲涓厓绱犵殑鏁版嵁鍩?BR> {
LinkList p;
int j=0;
p=L->next;
while(p && j<i-1)
{
p=p->next;
++j;
}
if(j>i || !p)
return ERROR;
else
e=p->data;
return OK;
}
int LocateElem(LinkList L,ElemType e,int (*compare)(ElemType,ElemType))
{ //鎵懼埌絎竴涓浜嶦婊¤凍鍑芥暟鐨勬暟鎹厓绱犵殑浣嶇疆
LinkList p;
int i=0;
p=L->next;
while(p)
{
++i;
if(compare(p->data,e))
return i;
p=p->next;
}
return 0;
}
int InsertList(LinkList L,int i,ElemType e) //鍦ㄧi涓暟鎹厓绱犱笂鎻掑叆涓涓厓绱?BR> {
LinkList p,s;
int j=0;
p=L;
while(p && j<i-1)
{
p=p->next;
++j;
}
if(!p || j>i)
return ERROR;
s=(LinkList)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
int DeleteList(LinkList &L,int i,ElemType e) //鍒犻櫎絎琲涓厓绱?BR> {
LinkList p,q;
int j;
j=0;
p=L;
while(p->next && j<i-1)
{
p=p->next;
++j;
}
if(!p->next || j>i)
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
int ListTraverse(LinkList L,int (*vi)(ElemType))
//瀵規墍鏈夐摼琛ㄤ腑鐨勫厓绱犺繘琛屽嚱鏁皏i鎿嶄綔
{
LinkList p;
p=L->next;
while(p)
{
vi(p->data);
p=p->next;
}
return OK;
}
void MergeList(LinkList La,LinkList Lb,LinkList &Lc)
{ //鍚堝茍浜屼釜闈為掑噺鐨凩a鍜孡b寰楀埌涓涓潪閫掑噺鐨凩c
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa && pb)
{
if(pa->data <= pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
Lb=NULL;
}
#define LIST_INIT_SIZE 100 瀹氫箟涓涓嚎鎬ц〃綾誨瀷
#define LISTINCREMENT 10
typedef struct
{
ElemType *elem; 鍩哄潃
int length; 鍏冪礌鐨勯暱搴?/SPAN>
int listsize;褰撳墠鐨勫瓨鍌ㄥ閲?/SPAN>
}Sqlist;
void InitList_Sq(Sqlist &L) 鍒濆鍖栨搷浣?/SPAN>
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
return overflow;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return ok;
}
void DestroyList_Sq(Sqlist &L) 閿姣佺嚎鎬ц〃
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return ok;
}
void ClearList(Sqlist L) 娓呴浂鎿嶄綔
{
L.length=0;
return ok;
}
void ListEmpty(Sqlist L) 鍒ょ┖鎿嶄綔
{
if(L.length=0)
return True;
else
return False;
}
int ListLength(Sqlist L) 杈撳嚭琛ㄧ殑闀垮害錛屾暟鎹厓绱犱釜鏁?/SPAN>
{
return L.length;
}
void GetElem(Sqlist &L,int i,ElemType &e) 寰楀埌絎?/SPAN>I 涓厓绱犵殑鏁版嵁鍏冪礌鐨勫?/SPAN>
{
if(i<1 || i>L.length)
return error;
e=*(L.elem+i-1);
return ok;
}
int LocateElem(Sqlist &L,ElemType e,void (*compare)(ElemType,ElemType)) 鏌ユ壘涓?/SPAN>E鐩哥瓑鐨勫厓绱犵殑浣嶇疆
{
ElemType *p;
i=1;
while(i<=L.length && !compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
void PriorElem(Sqlist L,ElemType cur_e,ElemType pre_e) 寰楀埌緇欏嚭鐨勬暟鐨勫墠涓涓厓绱犲?/SPAN>
{
int i=2;
ElemType *p;
p=L.elem+1;
while(i<=L.length && !(*p++==cur_e))
++i;
if(i>L.length)
return INFEASIBLE;
else
{
pre_e=*--p;
return OK;
}
}
void NextElem(Sqlist L,ElemType pre_e,ElemType cur_e) 寰楀埌鍚庝竴涓厓绱犵殑鍊?/SPAN>
{
int i=1;
ElemType *p
p=L.elem;
while(i<L.length && !(*p++==pre_e))
++i;
if(i>=L.length)
return INFEASIBLE;
else
{
cur_e=*++p;
return OK;
}
}
void InsertElem(Sqlist &L,int i,ElemType e) 鍦ㄧI涓厓绱犱腑鎻掑叆涓涓間負E鐨勫厓绱?/SPAN>
{
if(i<1 || i>=length+1)
return ERROR;
if(L.length>=L.listsize)
{
if(!newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)
*sizeof(ElemType))))
return OVERFLOW;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
p=L.elem+L.length-1;
q=L.elem+i-1;
for(p;p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return ok;
}
void DeleteElem(Sqlist &L,int i,ElemType e) 鍒犻櫎絎?/SPAN>I涓厓绱?/SPAN>
{
if(i<1 || i>=L.length)
return FALSE;
p=L.elem+i-1;
q=L.elem+L.length-1;
e=*p;
for(p;p<=q;++p)
*p=*(p+1);
--L.length;
return OK;
}
void ListTraverse(Sqlist &L,void (*vi)(ElemType)) 瀵圭嚎鎬ц〃榪涜VI鐨勬搷浣?/SPAN>
{
int i;
ElemType *p;
p=L.elem;
for(i=1;i<=L.length;++i)
vi(*p++);
return OK;
}
浠ヤ笂鏄嚎鎬ц〃鐨勪竴浜涘父鐢ㄧ殑鍘熸搷浣?
渚嬶細
1錛庢眰涓涓柊鐨勯泦鍚?/SPAN>A=A U B銆?/SPAN>
void union(Sqlist &LA,Sqlist LB)
{
la_len=LA.length;
lb_len=LB.length;
for(i=1;i<=lb_len;++i)
{
GetElem(LB,i,e);
if(!Locate(LA,e,compare()))
InsertList(LA,++la_len,e);
}
return OK;
}
2.灝嗕簩涓潪閫掑噺鐨?/SPAN>LA琛ㄥ拰LB琛ㄥ綊騫朵負涓涓柊鐨勯潪閫掑噺鐨?/SPAN>LC琛?/SPAN>
void MergeList(Sqlist LA,Sqlist LB,Sqlist &LC)
{
i=j=1;k=0;
InitList(LC);
while(i<=LA.length && j<=LB.length)
{
GetElem(LA,i,ai);
GetElem(LB,j,bj);
if(ai<=bj)
{
InsertList(LC,++k,ai);
++i;
}
else
{
InsertList(LC,++k,bj);
++j;
}
}
while(i<=LA.length)
{
GetElem(LA,i,ai);
InsertList(LC,++k,ai);
++i;
}
while(j<=LB.length)
{
GetElem(LB,i,bj);
InsertList(LC,++k,bj);
++j;
}
return OK;
}