ElemType predt = - 32767 ;
int judgeBst ( BTNode * bt) {
int b1, b2;
if ( bt == NULL ) {
return 1 ;
}
b1 = judgeBst ( bt-> lchild) ;
if ( b1== 0 || bt-> data< predt) {
return 0 ;
}
predt = bt-> data;
b2 = judgeBst ( bt-> rchild) ;
return b2;
}
void inOrder ( BTNode * b) {
BTNode * St[ MaxSize] , * p;
int top = - 1 ;
if ( b != NULL ) {
p = b;
while ( top> - 1 || p!= NULL ) {
while ( p != NULL ) {
top++ ;
St[ top] = p;
p = p-> lchild;
}
if ( top > - 1 ) {
p = St[ top] ;
top-- ;
printf ( "%C" , p-> data) ;
p = p-> rchild;
}
}
printf ( "\n" ) ;
}
}
int deletek ( SqList & L, int i, int k) {
int j;
if ( i< 1 || k< 1 || i> L. length) {
return 0 ;
}
for ( j= i+ k- 1 ; j< L. length; j++ ) {
L. elem[ j- k] = L. elem[ j] ;
}
L. length++ ;
return 1 ;
}
int QueueEmpty ( Queue Q) ;
int GetHead ( Queue Q, ElemType & x) ;
void EnQueue ( Queue & Q, ElemType x) ;
void DeQueue ( Queue & Q) ;
int EqualQueue ( Queue Q1, Queue Q2) {
ElemType t1, t2;
int finish = 1 ;
while ( ! QueueEmpty ( Q1) && ! QueueEmpty ( Q2) ) {
GetHead ( Q1, t1) ;
DeQueue ( Q1) ;
GetHead ( Q2, t2) ;
DeQueue ( Q2) ;
if ( t1 != t2) {
finish = 0 ;
break ;
}
}
if ( finish== 0 || ! QueueEmpty ( Q1) || ! QueueEmpty ( Q2) ) {
return 0
} else {
return 1 ;
}
}
void Unknown ( BiTree & T, ElemType A[ ] , int n) {
BiTNode * p, * pr, * q;
int i;
for ( i= 0 ; i< n; i++ ) {
q = ( BiTNode) malloc ( sizeof ( BiTNode) ) ;
q-> data = A[ i] ;
q-> lchild = q-> rchild = NULL ;
if ( T == NULL ) {
T = q;
} else {
p = T;
pr = NULL ;
while ( p!= NULL && p-> data!= q-> data) {
pr = p;
if ( p-> data < q-> data) {
p = p-> rchild;
} else {
p = p-> lchild;
}
}
if ( p == NULL ) {
if ( q-> data < pr-> data) {
pr-> lchild = q;
} else {
pr-> rchild = q;
}
}
}
}
}
void delSame ( LinkList & head) {
LinkList p= head-> next , q, r, t;
while ( p != NULL ) {
q = p;
r = p-> next;
while ( r != NULL ) {
if ( r-> data == p-> data) {
t = r-> next;
q-> next = t;
free ( r) ;
r = t;
} else {
q = r;
r = r-> next
}
}
p = p-> next;
}
}
int theSame ( LinkList head) {
ElemType x;
struct node {
Elemtype data[ MaxSize] ;
int top;
} st;
st. top = - 1 ; ;
LinkList p = head-> next;
while ( p != NULL ) {
st. top++ ;
st. data[ st. top] = p;
p = p-> next;
}
p = head-> next;
while ( p != NULL ) {
x = st. data[ st. top] ;
st. top-- ;
if ( p-> data != x) {
return 0 ;
}
p = p-> next;
}
return 1 ;
}
void split ( LinkList & L, LinkList & M) {
LinkList p= L-> next, ra, rb;
ra = L;
M = ( LinkList) malloc ( sizeof ( LNode) ) ;
rb = M;
while ( p != NULL ) {
if ( p-> data% 2 == 0 ) {
ra-> next = p;
ra = p;
p = p-> next;
} else {
rb-> next = p;
rb = p;
p = p-> next;
}
}
ra-> next = rb-> next = NULL ;
}
void intersection ( SqList A, SqList B, SqList & C) {
int i, j, k= 0 ;
for ( i= 0 ; i< A. length; i++ ) {
j= 0 ;
while ( j< B. length && A. elem[ i] != B. elem[ j] ) {
j++ ;
}
if ( j < B. length) {
C. elem[ k++ ] = A. elem[ i] ;
}
}
C. length = k+ 1 ;
}
void unknown ( BiTree T, ElemType k) {
if ( T == NULL ) {
return ;
}
if ( T-> rchild != NULL ) {
unknown ( T-> rchild, k) ;
}
if ( T-> data >= k) {
printf ( "%d" , T-> data) ;
}
if ( T-> lchild != NULL ) {
unknown ( T-> lchild, k) ;
}
}
int listDelete ( LinkList & L, int i, ElemType & e) {
LinkList p, q;
p = L;
int j = 0 ;
while ( p-> next && j< i- 1 ) {
p = p-> next;
++ j;
}
if ( ! ( p-> next) || j> i- 1 ) {
return 0 ;
}
q = p-> next;
p-> next = q-> next ;
e = q-> data;
free ( q) ;
return 1 ;
}
int unknown ( BiTNode * T, BiTNode * s) {
int k = 0 ;
BiTNode * p = T;
if ( T != null) {
k++ ;
while ( p-> data != s-> data) {
if ( p-> data < s-> data) {
p = p-> rchild;
} else {
p = p-> lchild;
}
k++ ;
}
}
return k;
}
int inOrderTraverse ( BiTree T) {
SqStack S;
BiTree p;
p = T;
push ( S, T) ;
while ( ! StackEmpty ( S) ) {
while ( getTop ( S, p) && p) {
push ( S, p-> lchild) ;
}
pop ( S, p) ;
if ( ! StackEmpty ( S) ) {
pop ( S, p) ;
printf ( "%d" , T-> data) ;
push ( p-> rchild) ;
}
}
return 1 ;
}
在顺序表第i个元素之前插入元素e
int listInsert_Sq ( SqList & L, int i, ElemType e) {
ElemType * p, * q;
if ( i<= 1 || i> L. length+ 1 ) {
return 0 ;
}
if ( L. listsize <= L. length) {
ElemType * newbase = ( ElemType * ) realloc ( L. elem, ( L. listsize+ LISTINCREMENT) * sizeof ( ElemType) ) ;
if ( ! newbase) {
return 0 ;
}
L. elem = newbase;
L. listsize += LISSTINCREMENT;
}
q = & ( L. elem[ i- 1 ] ) ;
for ( p= & ( L. elem ( L. length- 1 ) ; p>= q; -- p) ) {
* ( p+ 1 ) = * p;
}
* q = e;
++ L. length;
return 1 ;
}
void unknown ( LinkList head, LinkList & newhead) {
LNode * p, * q, * r;
newhead = ( LinkList) malloc ( sizeof ( LNode) ) ;
p = head;
q = newhead;
while ( p != NULL ) {
r = ( LinkList) malloc ( sizeof ( LNode) ) ;
r-> data = p-> data;
q-> next = r;
q = r;
p = p-> next;
}
q-> next = NULL ;
r = newhead;
newhead = newhead-> next;
free ( r) ;
}
T&& T-> data<= x
free ( p)
p-> data > x
q-> lchild = p-> rchild
p = q-> lchild
int listInsert_L ( LinkList & L, int i, ElemType e) {
LinkList p, s;
p = L;
int j = 0 ;
while ( p && j< i- 1 ) {
p = p-> next;
++ j;
}
if ( || j> i- 1 ) {
return 0 ;
}
s = ( LinkList) malloc ( sizeof ( LNode) ) ;
s-> data = e;
s-> next = p-> next;
p-> next = s;
return 1 ;
}
int unknown ( LNode * head) {
LNode * p, * pre;
int flag = 1 ;
if ( head) {
pre = head;
p = head-> next;
while ( p!= NULL && flag== 1 ) {
if ( pre-> data < p-> data) {
flag = 0 ;
}
pre = p;
p = p-> next;
}
}
if ( flag == 1 ) {
return 1 ;
} else {
return 0 ;
}
}
# define MAXSIZE 100
int unknown ( BiTNode * T) {
BiTNode * Q[ MAXSIZE] , * p;
int front= 0 , rear= 0 ;
Q[ ++ rear] = T;
while ( front != rear) {
front = ( front+ 1 ) % MAXSIZE;
p = Q[ front] ;
printf ( "%d" , p-> data) ;
if ( P-> lchild != NULL ) {
rear = ( rear+ 1 ) % MAXSIZE;
Q[ rear] = p-> lchild;
}
if ( p-> rchild != NULL ) {
rear = ( rear+ 1 ) % MAXSIZE;
Q-> rear = p-> rchild;
}
}
}
int BST_OutputNode ( BiTNode * T, ElemType x) {
if ( T) {
BST_OutputNode ( T-> rchlid, x) ;
if ( T-> data >= x) {
printf ( T-> data) ;
} else {
return 1 ;
}
BST_OutputNode ( T-> lchild, x) ;
}
}
int indexOfLargest ( int A[ ] , int n) {
int IndexSoFar, CurrentIndex;
IndexSoFar = 0 ;
for ( CurrentIndex= 1 ; CurrentIndex< n; CurrentIndex++ ) {
if ( A[ CurrentIndex] > A[ IndexSoFar] ) {
IndexSoFar = CurrentIndex;
}
return IndexSoFar;
}
}
void selectSort ( int A[ ] , int n) {
int last, L;
int temp;
for ( last= n- 1 ; last>= 1 ; last-- ) {
L = IndexOfLarge ( A, last+ 1 ) ;
temp = A[ L] ;
A[ L] = A[ last] ;
A[ last] = temp;
}
}