1、实验一:#include#include#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef structint *elem;int length;int listsize;SqList;int InitList_Sq(SqList if(!L.elem)return 0;L.length=0;L.listsize=LIST_INIT_SIZE;return 1;int ListInsert_Sq(SqList if(iL.length+1)return 0;if(L.length=L.listsize)newbase=(int*)
2、realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int);if(!newbase) return 0;L.elem=newbase;L.listsize+=LISTINCREMENT;q=for(p=p=q;-p)*(p+1)=*p;*q=e;+L.length;return 1;int ListDelete_Sq(SqList if(iL.length)return 0;p=e=*p;q=L.elem+L.length-1;for(+p;p#include typedef int Status;typedef struct LNodeint
3、data;struct LNode *next;LNode, *LinkList;Status ListInsert_L(LinkListint j;p=L; j=0;while(p+j;if(!p|ji-1) return 0;s=(LinkList)malloc(sizeof(LNode);s-data=e;s-next=p-next;p-next=s;return 1;Status ListDelete_L(LinkListint j;p=L;j=0;while(p-next+j;if(!(p-next)|ji-1) return 0;q=p-next; p-next=q-next;e=
4、q-data; free(q);return 1;void CreateList_L(LinkList LinkList p;L=(LinkList)malloc(sizeof(LNode);L-next=NULL;for(i=n;i0;-i)p=(LinkList)malloc(sizeof(LNode);scanf(“%d“,p-next=L-next;L-next=p; Status GetElem_L(LinkList L, int i, int int j;p=L-next;j=1;while(p +j;if(!p|ji)return 0;e=p-data; return 1; vo
5、id main() LinkList L,p; int i,n; int e;printf(“请输入你想创建多少个元素的链表“);scanf(“%d“, CreateList_L(L, n);for(p=L-next;p!=NULL;p=p-next)printf(“%d “,p-data);printf(“n“);printf(“请输入想查找第几个元素“);scanf(“%d“, GetElem_L(L, i, e);printf(“e=%dn“,e);printf(“请输入想在第几个元素位置前插入元素“);scanf(“%d%d“,ListInsert_L(L, i, e);for(p=L
6、-next;p!=NULL;p=p-next)printf(“%d “,p-data);printf(“n“);printf(“请输入想删除第几个元素“);scanf(“%d“, ListDelete_L(L,i,e);for(p=L-next;p!=NULL;p=p-next)printf(“%d “,p-data);printf(“n“);实验三:#include#include#define MAXNUM 20#define ElemType int/*定义顺序栈的存储结构 */typedef structElemType stackMAXNUM;int top;SqStack;/*初始
7、化顺序表*/void InitStack(SqStack *p)if(!p)printf(“内存分配失败!“);p-top=-1;/*入栈*/void Push(SqStack*p,ElemType x)if(p-top top =p-top+1;p-stackp-top=x;Elseprintf(“Overflow!n“);/*出栈*/ElemType Pop(SqStack *p)ElemType x;if(p-top=0)x=p-stackp-top;printf(“以前的栈顶数据元素%d 已经被删除!n“,p-stackp-top);p-top=p-top-1;return(x);el
8、seprintf(“Underflow!?n“);return(0);/*获取栈顶元素*/ElemType GetTop(SqStack*p)ElemType x;if(p-top=0)x=p-stackp-top;printf(“n 栈顶元素为:%dn“,x);return(x);elseprintf(“Underflow!n“);return(0);/*遍历顺序表*/void OutStack(SqStack *p)int i;printf(“n“);if(p-toptop;i=0;i-)printf(“第%d 个数据元素是 :?%6dn“,i,p-stacki); /*置空顺序表*/vo
9、id setEmpty(SqStack *p)p-top=-1; /*?数值转换*/void shuzhi(SqStack *p,int n,int x)while(n)Push(p,n%x);n=n/x;/*判断回文数*/bool huiwen(SqStack *p,int n)int i=0,j=0;int aMAXNUM;while(n)ai=n%10;Push(p,n%10);n=n/10;i+;while(p-stackp-top-j=aj) j+;if(jtoptop;i=0;i-)printf(“%6d“,q-stacki);break;case 7:q=(SqStack * )
10、malloc(sizeof(SqStack);int s;InitStack(q);printf(“请输入要判断的正数:n“);scanf(“%d“,s=huiwen(q,y);if(s=1)printf(“%d 是回文数 !“,y);elseprintf(“%d 不是回文数 !“,y);break;case 8:exit(0);while(cord #include using namespace std; #define n1 2 #define n2 3 int an1n2,bn2n1; int main() int an1n2,bn2n1; int i,j; printf(“请输入一个
11、%d 行%d 列的矩阵:“,n1,n2); for(i=0;i#includetypedef struct BiNodechar data;struct BiNode *lchild,*rchild;BiNode,*BiTree;int createbiTree(BiTreescanf(“%c“,if(ch= ) T=NULL;elseif (!(T=(BiNode*)malloc(sizeof(BiNode)return 0;T-data=ch;createbiTree(T-lchild);createbiTree(T-rchild);return 1;int inorder(BiTree
12、T)if(T)inorder(T-lchild);printf(“%c“,T-data);inorder(T-rchild);return 1;void main()BiTree T;createbiTree(T);inorder(T);中序遍历#include #include typedef struct nodeint data;struct node *lchl,*rchl;NODE;void create(NODE *t) /建立 int a;scanf(“%d“,if(a)*t=(NODE*)malloc(sizeof(NODE);(*t)-data=a;create(create
13、(Elset=NULL;void print(NODE *T) /中序遍历if(T)print(T-lchl);printf(“%4d“,T-data);print(T-rchl);后序二叉树#include #include struct BiTNode/定义结构体 Char data; Struct BiTNode *lchild,*rchild; Void later(struct BiTNode * scanf(“%c“,If (ch= ) p=NULL;Elsep=(struct BiTNode *)malloc(sizeof(struct BiTNode);p-data=ch;la
14、ter(p-lchild);later(p-rchild);Void print(struct BiTNode *p)/后 序 遍 历( 输 出 二 叉 树 )if(p!=NULL)print(p-lchild);print(p-rchild);printf(“%c“,p-data);Elseprintf(“ “);void main()/主 函 数/*检 测 : printf(“到 了 吗 “);*/ Struct BiTNode *p; later(p);print(p);int main()NODE *root;create(print(root);return 0;.实验六顺序查找#i
15、nclude “stdio.h“ #include “malloc.h“ #define MAX 100 typedef struct sq int key; /int data; sqlist; sqlist stMAX,sMAX; void creat(sqlist stMAX,int n) int i; for(i=0;i #include void main() int a10=1,3,4,6,8,9,10,13,15,18; int n,i,low=0,high=9; int adrress=0,count=0; printf(“pelase input the search num
16、ber:“); scanf(“%d“, high=high/2; if(nahigh) count+; low=high+1; for(i=low;i #include #include using namespace std; /二叉树结点 typedef struct BiTNode /数据 char data; /左右孩子指针 struct BiTNode *lchild,*rchild; BiTNode,*BiTree; /按先序序列创建二叉树 int CreateBiTree(BiTree /按先序次序输入二叉树中结点的值(一个字符),#表示空树 scanf(“%c“, if(dat
17、a = #) T = NULL; else T = (BiTree)malloc(sizeof(BiTNode); /生成根结点 T-data = data; /构造左子树 CreateBiTree(T-lchild); /构造右子树 CreateBiTree(T-rchild); return 0; /输出 void Visit(BiTree T) if(T-data != #) printf(“%c “,T-data); /先序遍历 void PreOrder(BiTree T) if(T != NULL) /访问根节点 Visit(T); /访问左子结点 PreOrder(T-lchil
18、d); /访问右子结点 PreOrder(T-rchild); /中序遍历 void InOrder(BiTree T) if(T != NULL) /访问左子结点 InOrder(T-lchild); /访问根节点 Visit(T); /访问右子结点 InOrder(T-rchild); /后序遍历 void PostOrder(BiTree T) if(T != NULL) /访问左子结点 PostOrder(T-lchild); /访问右子结点 PostOrder(T-rchild); /访问根节点 Visit(T); /* 先序遍历(非递归) 思路:访问 T-data 后,将 T 入栈
19、,遍历左子树;遍历完左子树返回时,栈顶元素应为 T,出栈,再先序遍历 T 的右子树。 */ void PreOrder2(BiTree T) stack stack; /p 是遍历指针 BiTree p = T; /栈不空或者 p 不空时循环 while(p | !stack.empty() if(p != NULL) /存入栈中 stack.push(p); /访问根节点 printf(“%c “,p-data); /遍历左子树 p = p-lchild; else /退栈 p = stack.top(); stack.pop(); /访问右子树 p = p-rchild; /while /
20、* 中序遍历(非递归) void InOrder2(BiTree T) stack stack; /p 是遍历指针 BiTree p = T; /栈不空或者 p 不空时循环 while(p | !stack.empty() if(p != NULL) /存入栈中 stack.push(p); /遍历左子树 p = p-lchild; else /退栈,访问根节点 p = stack.top(); printf(“%c “,p-data); stack.pop(); /访问右子树 p = p-rchild; /while /后序遍历(非递归) typedef struct BiTNodePost
21、 BiTree biTree; char tag; BiTNodePost,*BiTreePost; void PostOrder2(BiTree T) stack stack; /p 是遍历指针 BiTree p = T; BiTreePost BT; /栈不空或者 p 不空时循环 while(p != NULL | !stack.empty() /遍历左子树 while(p != NULL) BT = (BiTreePost)malloc(sizeof(BiTNodePost); BT-biTree = p; /访问过左子树 BT-tag = L; stack.push(BT); p =
22、p-lchild; /左右子树访问完毕访问根节点 while(!stack.empty() /退栈 stack.pop(); BT-biTree; printf(“%c “,BT-biTree-data); /遍历右子树 if(!stack.empty() BT = stack.top(); /访问过右子树 BT-tag = R; p = BT-biTree; p = p-rchild; /while int main() BiTree T; CreateBiTree(T); printf(“先序遍历:n“); PreOrder(T); printf(“n“); printf(“先序遍历(非递归):n“); PreOrder2(T); printf(“n“); printf(“中序遍历:n“); InOrder(T); printf(“n“); printf(“中序遍历(非递归):n“); InOrder2(T); printf(“n“); printf(“后序遍历:n“); PostOrder(T); printf(“n“); printf(“后序遍历(非递归):n“); PostOrder2(T); printf(“n“); return 0;