数据结构: 1 顺序队列:源程序 #define maxsize 256 typedef struct { int data[maxsize]; int front; int rear; } sqqueue; int sqinit(sqqueue *p) //队列初始化 { p->front=0; p->rear=0; return 1; } int enqueue(sqqueue *q, int e) //入队 { if((q->rear+1)%maxsize==q->front) return 0; else q->data[q->rear]=e; q->rear=(q->rear+1)%maxsize; return 1; } int dequeue(sqqueue *q) //出队 { int e; if (q->front==q->rear) return 0; e=q->data[q->front]; q->front=(q->front+1)%maxsize; return e; } int empty(sqqueue *q) //判空 { int v; if (q->front==q->rear) v=1; else v=0; return v; } int gethead(sqqueue *q) //取得头元素 { int e; if (q->front==q->rear) e=-1; else e=q->data[q->front]; return e; } void display(sqqueue *q) //显示所有元素 { int s; s=q->front; printf("the sequeue is display:/n"); if (q->front==q->rear) printf("the sequeue is empty!"); else { while(s!=q->rear) { printf("->%d", q->data[s]); s=(s+1)%maxsize; } printf("/n"); } } int _tmain(int argc, _TCHAR* argv[])//函数使用样例 { sqqueue* head=new sqqueue(); int n,i,m,x,y,select,xq; printf("create a empty sequeue/n"); sqinit(head); printf("please input the sequeue length:/n"); scanf("%d",&n); for (i=0;i<n;i++) { printf("please input a sequeue value:/n"); scanf("%d",&m); enqueue(head,m); } printf("head->rear:%d/n",head->rear); printf("head->front:%d/n",head->front); display(head); printf("select 1 **** enqueue() /n"); printf("select 2 **** dequeue() /n"); printf("select 3 **** empty () /n"); printf("select 4 **** gethead() /n"); printf("select 5 **** display() /n"); printf("if want to exist ,then press 6/n"); printf("please select (1--6):"); int flag=1; while(flag) { scanf("%d",&select); switch(select) { case 1: { printf("please input a value :/n "); scanf("%d",&x); enqueue(head,x); display(head); break; } case 2: { dequeue(head); display(head); break; } case 3: { if(empty(head)) printf("the sequeue is empty/n"); else printf("the sequeue is not empty/n"); break; } case 4: { y=gethead(head); printf("output head value:%d/n",y); break; } case 5: { display(head); break; } case 6: { flag=0; break; } } delete head; } } 2 顺序栈:源程序 #define m 256 typedef struct { int stack[m]; int top; } stackstru; void init(stackstru *s) /*装入栈*/ { s->top=0; } void push(stackstru *s,int x) /*入栈操作*/ { if (s->top>=m-1) printf("the stack is overflow!/n"); else { s->top=s->top+1; s->stack[s->top]=x; } } void display(stackstru *s) /*显示栈所有数据*/ { if(s->top==0) printf("the stack is empty!/n"); else { int k=s->top; while(k!=0) { printf("%d->",s->stack[k]); k--; } printf("/n"); } } int pop(stackstru *s) /*出栈操作并返回被删除的那个记录*/ { int y=0; if(s->top==0) printf("the stack is empty!/n"); else { y=s->stack[s->top]; s->top=s->top-1; } return y; } int gettop(stackstru *s) /*得到栈顶数*/ { int e=0; if(s->top==0) return e; else e=s->stack[s->top]; return e; } int _tmain(void)//函数使用样例 { int n,i,k,h,x1,x2,select; printf("create a empty stack!/n"); stackstru* p=new stackstru(); init(p); printf("input a stack length:/n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("input a stack value:/n"); scanf("%d",&k); push(p,k); } printf("select 1:display()/n"); printf("select 2:push()/n"); printf("select 3:pop()/n"); printf("select 4:gettop()/n"); printf("select 6:exit /n"); printf("input a your select(1-4):/n"); int flag=1; while(flag) { scanf("%d",&select); switch(select) { case 1: { display(p); break; } case 2: { printf("input a push a value:/n"); scanf("%d",&h); push(p,h); display(p); break; } case 3: { x1=pop(p); printf("x1->%d/n",x1); display(p); break; } case 4: { x2=gettop(p); printf("x2->%d",x2); break; } case 6: { flag=0; break; } default: break; } } delete p; } 3 链表: 源程序 typedef int ElemType; /* 整形数据*/ typedef struct listNode { ElemType data; struct listNode *next; }LNode,*pListNode; int length (pListNode *pp); ElemType get(pListNode *pp,int i); void insert(pListNode *pp,ElemType x,int i); void del(pListNode *pp,int i); int locate(pListNode *pp,ElemType x); void display(pListNode *pp); void release(pListNode *pp); int length(pListNode *pp) { if(!pp)return 0; int len=0; pListNode p=*pp; while(p) { len++; p=p->next; } return len; } ElemType get(pListNode *pp,int i) { ElemType ret=0; if(!pp) { printf("the param list pointer passed is incorrect!/n"); return ret; } pListNode p=*pp; if(i>0) { int k=1; while(p) { if(k==i) return p->data; p=p->next; k++; } } if(!p) printf("the param of index passed goes beyond!/n"); return ret; } void insert(pListNode *pp,ElemType x,int i) { pListNode p=*pp; int k=1; pListNode temp=NULL; while(p&&k<i) { temp=p; p=p->next; k++; } if(p) { pListNode newNode=new listNode(); newNode->data=x; newNode->next=p; if(temp) temp->next=newNode; else *pp=newNode; } } void del(pListNode *pp,int i) { pListNode p=*pp; pListNode bef=NULL; int k=1; if(i==1) { bef=p; p=p->next; delete bef; *pp=p; return; } if (i>1) { while(p) { if(k==i) { pListNode temp=p; p=p->next; delete temp; bef->next=p; return; } bef=p; p=p->next; k++; } if(!p) printf("the param of index passed goes beyond!/n"); } } void display(pListNode *pp) { pListNode p=*pp; int k=0; int i=1; while(p) { printf("%d->%d/t",i,p->data); p=p->next; i++; } printf("/n"); } void release(pListNode *pp) { if(pp) { pListNode p=*pp; while(p) { pListNode temp=p; p=p->next; delete temp; } *pp=NULL; } } int locate(pListNode *pp,ElemType x) { int index=1; if(!pp) return -1; pListNode p=*pp; while(p) { if(p->data==x) return index; p=p->next; index++; } if(!p) return -1; } int main() { int n,flag; pListNode head=NULL; pListNode temp=head; printf("input the list number wanted to dynamic creat:/n"); scanf("%d",&n); for(int i=0;i<n;i++) { printf("input the %d list node data value:/n",i+1); ElemType x; scanf("%d",&x); pListNode next=new listNode(); next->data=x; if(!temp) { temp=next; head=temp; } else { temp->next=next; temp=next; } } flag=1; while(flag) { printf("select 1 *** to show Len/n"); printf("select 2 *** to get node data/n"); printf("select 3 *** to insert node/n"); printf("select 4 *** to delete node/n"); printf("select 5 *** to display the list/n"); printf("select 6 *** to locate list node match the given data value/n"); printf("select 7 *** to exit/n"); int select; scanf("%d",&select); switch (select) { case 1: { printf("current list length is :%d/n",length(&head)); break; } case 2: { int k; printf("input the index of the node to show data/n"); scanf("%d",&k); printf("the %d node data is %d/n",k,get(&head,k)); break; } case 3: { int k; printf("input the index of the node to insert before /n"); scanf("%d",&k); ElemType x; printf("input the node data /n"); scanf("%d",&x); insert(&head,x,k); break; } case 4: { int k; printf("input the index of the node to delete /n"); scanf("%d",&k); del(&head,k); break; } case 5: { display(&head); break; } case 6: { ElemType x; printf("input the node data value to locate list node /n"); scanf("%d",&x); printf("the list node index match the given data value is %d/n",locate(&head,x)); break; } case 7: { flag=0; break; } default: break; } } release(&head); return 0; } 4 链栈: 可实现并发读写。 5 二叉树: 二叉树:源程序 typedef struct bitnode { char data; struct bitnode *lchild, *rchild; }bitnode, *bitree; int nodeNum; void createbitree(bitnode ** t, int *n) { char x; bitnode *q; if(*n>=nodeNum) return; *n=*n+1; getchar(); printf("/n Input %d DATA:",*n); x=getchar(); q=(bitnode*)malloc(sizeof(bitnode)); q->data=x; q->lchild=NULL; q->rchild=NULL; *t=q; printf(" This Address is: %o, Data is: %c,/n Left Pointer is: %o, Right Pointer is: %o",q,q->data,q->lchild,q->rchild); createbitree(&q->lchild,n); createbitree(&q->rchild,n); return; } void deletebitree(bitnode* e) { if(e) { deletebitree(e->lchild); deletebitree(e->rchild); free (e); } } void visit(bitnode *e) { printf(" Address: %o, Data: %c, Left Pointer: %o, Right Pointer: %o/n",e,e->data,e->lchild,e->rchild); } void preordertraverse(bitnode *t) { if(t) { visit(t); preordertraverse(t->lchild); preordertraverse(t->rchild); return ; } else return ; } void countleaf(bitnode *t, int *c) { if(t!=NULL) { if (t->lchild==NULL && t->rchild==NULL) { *c=*c+1; } countleaf(t->lchild,c); countleaf(t->rchild,c); } return; } int treehigh(bitnode *t) { int lh,rh,h; if(t==NULL) h=0; else { lh=treehigh(t->lchild); rh=treehigh(t->rchild); h=(lh>rh ? lh:rh)+1; } return h; } int main(void) { bitnode *t; int count=0; int n=0; printf("please input the number of the tree node/n"); scanf("%d",&nodeNum); printf("/n Please input TREE Data:/n"); createbitree(&t,&n); printf("/n This is TREE struct: /n"); preordertraverse(t); countleaf(t,&count); printf("/n This TREE has %d leaves ",count); printf(" , High of The TREE is: %d/n",treehigh(t)); deletebitree(t); } 创建的二叉树只有左子树。