数据结构 直接插入排序 排序过程问题
加入60之前,前6个数(54,38,96,23,15,72)已经按序排成(15,23,38,54,72,96) 再加入60时 先和96比(一次),因为60小于96,再和72比(第两次),60小于72,就再和54比(第三次),60大于54了,所以插入在54和72之间,是从后往前比较
数据结构和算法的经典教材
算法:《算法导论》
1.(08年度畅销榜NO.2)(被《程序员》等机构评选为2006年最受读者喜爱的十大IT图书之一)
本书以相当的深度介绍了许多常用的数据结构和有效的算法,使得这些算法的设计和分析易于被各个层次的读者所理解。
2.这本书是全世界最权威的算法课程的大学课本了,基本上全世界的名牌大学用的教材都是它。这本书一共四位作者,Thomas H. Cormen,Charles E. Leiserson和Ronald L. Rivest是来自MIT的教授,Clifford Stein是MIT出来的博士,现在哥伦比亚大学做教授
数据结构 用C语言判断一个栈是否为空的算法
//---------------------------------------------------------------------------
#include #include #define mem_err malloc() error! #define empty_err stack is empty! typedef struct node{ char oper; struct node *next; }node; typedef struct{ node *head; unsigned int size; }stack; void error_exit(const char *msg) { fprintf(stderr,%sn,msg); exit(-1); } int isempty(stack *stk) { return stk->size?0:1; } stack *init(void) { stack *rt=(stack*)malloc(sizeof(stack)); if (rt==null) error_exit(mem_err); rt->head=null; rt->size=0; return rt; } void push(stack *stk,char op) { node *tp=(node*)malloc(sizeof(node)); if (tp==null) error_exit(mem_err); tp->oper=op; tp->next=stk->head; stk->head=tp; ++stk->size; } char pop(stack *stk) { char op; node *tmp; if (isempty(stk)) { error_exit(empty_err); } op=stk->head->oper; tmp=stk->head; stk->head=tmp->next; --stk->size; free(tmp); return op; } char top(stack *stk) { if (isempty(stk)) { error_exit(empty_err); } return stk->head->oper; } void del_stk(stack *stk) { node *t; while (stk->head) { t=stk->head; stk->head=t->next; free(t); } free(stk); } int islr(const char a) { return a=='('||a=='['||a=='{'; } int isrr(const char a) { return a==')'||a==']'||a=='}'; } int match(const char a,const char b) { int t; switch (a) { case '(':t=b==')';break; case '[':t=b==']';break; case '{':t=b=='}';break; } return t; } int main(int argc, char* argv[]) { char a; stack *stk=init(); while ((a=getchar())!='n') { if (islr(a)) { push(stk,a); } else if (isrr(a)) { if (!isempty(stk)&&match(top(stk),a)) pop(stk); else break; } } if (!isempty(stk)) { printf(unmatched!n); del_stk(stk); } else printf(matched!n); return 0; } //---------------------------------------------------------------------------