您的位置首页百科问答

线性表的顺序存储结构

线性表的顺序存储结构

的有关信息介绍如下:

问题补充说明:实验内容: 1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历(依次打印出每个数据元素)。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。 4.实现把该表中某个数据元素删除。 5.实现在该表中插入某个数据元素。 6编写一个主函数,调试上述算法。 实验说明: 1.算法1至算法5可以以头文件的方式存储,主函数实现该头文件的包含即可调用 2.建立顺序表时可利用随机函数自动产生数据。

线性表的顺序存储结构

#include<stdio.h>

#include<stdlib.h>

#include<c360问答onio.h>

structnode

{

intvalue;

structnode*left;

structnode*right;

};

typedefstructnodeNODE;

typedefstructnode*PNODE;

voidnew_node(PNODE*n,intvalue)

{

*n=(PNODE)m蒸织群洋洋吧挥刚居物alloc(sizeof(NODE));

if(*n!=NULL)

{

(*n)->value=value;

(*n)->lef基权松止利t=NULL;

(*n)->right=NULL;

}

}

voidfree_node(PNODE*n)

{

if((*n)!=NU花LL)

{

free(*n);

*n=NULL;

}

}

voidfree_tree(PNODE*n)

{

if(*n==NULL)return;

if((*n)->left!=NULL)

{

free_tree(&((*n)->lef酒信效与t));

}

if((唱岩省*n)->right!=NULL)

{

free_tree(&((*n)->right));

}

free_node(n);

}

PNODEfind_node(PNODEn,intvalue)

{

if(n==NULL)

{

returnNULL;

放情前粮二耐叶质别知扬}

elseif(n->value==value)

{

returnn;

}

e河析校阳专lseif(value<=n->value)

{

returnfind_node(n->left,value);

}

else

{

returnfind_node(n->right,value);

}

}

voidinsert_node(PNODE*n,intvalue)

{

if(*n==NULL)

{

new_n雷容烟草督善走毫画ode(n,value);

}

elseif(value==(*n)->value)

{

return;

}

elseif(value<(*n)->value)

{

insert_node(&((*n)->left),value);

}

else

{

insert_node(&((*n)->right),value);

}

}

intget_max_depth(PNODEn)

{

intle象九久ft=0;

intright=0;

if(n垂温南==NULL)

{

return0;

}

if(n->left!=NULL)

{

left=1+get_max_dept济协钢规防肥自渐可条h(n->left);

}

if(n->right!=NULL)

{

right=1+get_max_depth(n->right);

}

retur当n(left>right?left:right);

}

intget_min_depth(PNODEn)

{

intleft=0;

intright=0马听丝利程移室翻吃从;

if(n==NULL)

{

return0;

}

if(n->left!=NULL)

{

left=1+get_min_depth(n原皇引宪至介善女->left);

模般图沙来就未和}

if(n->right!=NULL)

{

right=1+get_min_depth(n副加->right);

}

return(left<right?left:right);

}

intget_num_nodes(PNODEn)

{

intleft=0;

intrigh决课失具线棉观府刻临江t=0;

if(n==NULL)

{

return0;

}

if(n->left!=NULL)

{

left=get_num_nodes(n->left);

}

if(n->right!=NULL)

{

right=get_num_nodes(n->right);

}

return(left+1+right);

}

intget_min_value(PNODEn)

{

if(n==NULL)return0;

if(n->left==NULL)

{

returnn->value;

}

else

{

returnget_min_value(n->left);

}

}

intget_max_value(PNODEn)

{

if(n==NULL)return0;

if(n->right==NULL)

{

returnn->value;

}

else

{

returnget_max_value(n->right);

}

}

voiddeletenode(PNODE*n)

{

PNODEtmp=NULL;

if(n==NULL)return;

if((*n)->right==NULL){

tmp=*n;

*n=(*n)->left;

free_node(n);

}

elseif((*n)->left==NULL)

{

tmp=*n;

*n=(*n)->right;

free_node(n);

}

else

{

for(tmp=(*n)->right;tmp->left!=NULL;tmp=tmp->left);

tmp->left=(*n)->left;

tmp=(*n);

*n=(*n)->right;

free_node(&tmp);

}

}

voiddelete_node(PNODE*n,intvalue)

{

PNODEnode;

if(n==NULL)return;

node=find_node(*n,value);

if((*n)->value==value)

{

deletenode(n);

}

elseif(value<(*n)->value)

{

delete_node(&((*n)->left),value);

}

else

{

delete_node(&((*n)->right),value);

}

}

voidpre_order_traversal(PNODEn)

{

if(n!=NULL)

{

printf("%i",n->value);

pre_order_traversal(n->left);

pre_order_traversal(n->right);

}

}

voidin_order_traversal(PNODEn)

{

if(n!=NULL)

{

in_order_traversal(n->left);

printf("%i",n->value);

in_order_traversal(n->right);

}

}

voidpost_order_traversal(PNODEn)

{

if(n!=NULL)

{

post_order_traversal(n->left);

post_order_traversal(n->right);

printf("%i",n->value);

}

}

voidmain()

{

charbuf[50];

intoption;

PNODEtree=NULL;

PNODEnode=NULL;

while(1)

{

printf("-------------------\n");

printf("Optionsare:\n\n");

printf("0Exit\n");

printf("1Insertnode\n");

printf("2Deletenode\n");

printf("3Findnode\n");

printf("4Preordertraversal\n");

printf("5Inordertraversal\n");

printf("6Postordertraversal\n");

printf("7Maxdepth\n");

printf("8Mindepth\n");

printf("9Maxvalue\n");

printf("10Minvalue\n");

printf("11NodeCount\n\n");

printf("-------------------\n");

printf("Selectanoption:");

fgets(buf,sizeof(buf),stdin);

sscanf(buf,"%i",&option);

printf("-------------------\n");

if(option<0||option>11)

{

fprintf(stderr,"Invalidoption");

continue;

}

switch(option)

{

case0:

exit(0);

case1:

printf("Enternumbertoinsert:");

fgets(buf,sizeof(buf),stdin);

sscanf(buf,"%i",&option);

printf("\n\n");

insert_node(&tree,option);

break;

case2:

printf("Enternumbertodelete:");

fgets(buf,sizeof(buf),stdin);

sscanf(buf,"%i",&option);

printf("\n\n");

delete_node(&tree,option);

break;

case3:

printf("Enternumbertofind:");

fgets(buf,sizeof(buf),stdin);

sscanf(buf,"%i",&option);

printf("\n\n");

node=find_node(tree,option);

if(node!=NULL)

{

printf("FOUNDnode\n\n");

}

else

{

printf("Couldn'tfindnode\n\n");

}

break;

case4:

printf("Preordertraversal:");

pre_order_traversal(tree);

printf("\n\n");

break;

case5:

printf("Inordertraversal:");

in_order_traversal(tree);

printf("\n\n");

break;

case6:

printf("Postordertraversal:");

post_order_traversal(tree);

printf("\n\n");

break;

case7:

printf("Maxdepthis%i\n\n",get_max_depth(tree));

break;

case8:

printf("Mindepthis%i\n\n",get_min_depth(tree));

break;

case9:

printf("Maxvalueis%i\n\n",get_max_value(tree));

break;

case10:

printf("Minvalueis%i\n\n",get_min_value(tree));

break;

case11:

printf("NodeCountis%i\n\n",get_num_nodes(tree));

break;

}

}

printf("PressAnykeytoEndtheProgram!");

getch();

}