资源描述:
《数据结构实验广义表》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《数据结构》实验报告实验题目:广义表的创建与遍历实验目的:熟悉和掌握广义表的定义及结构,可以创建及遍历广义表。实验内容:利用栈创建以及遍历一个广义表。一、需求分析1.本演示程序中,输入广义表的内容应为任意符合广义表要求结构的数据,将数据输入创建广义表中,再通过遍历程序将其以广义表形式输出。2.本程序是以用户与计算机的对话方式执行,运行程序后,按要求输入数据即可。3.程序执行的命令包括:(1)构造广义表与链栈,并初始化(2)输入广义表(3)输出广义表(4)结束4.测试数据:输入((),((a,b),(c,d)))输出((),((a,b),(c,d)))错误输
2、入:如果输入((),((a,b),(c,d))))输出((),((a,b),(c,d)))二概要设计为了实现上述操作,应以广义链表为存储结构。1.基本操作:Snode*Push(Snode*top,node*input)实现指针入栈Snode*Pop(Snode*top,node**output)实现指针出栈node*create()广义表的建立voidprint(node*head)广义表的输出2.本程序包括三个模块:(1)主程序模块(2)广义表的创建(3)广义表的遍历(4)入栈模块(5)出栈模块(6)模块调用图:入栈模块广义表的创建主程序模块出栈模块广
3、义表的遍历三详细设计1.元素类型、节点类型和指针类型//定义广义表typedefstructnode{chardata;/*存储数据*/inttag;/*用以标记,标记为1时为左括号,标记为0时为字符,标记为-1时为新开辟节点*/structnode*hp;/*该指针指向字表*/structnode*tp;/*该指针指向后续节点*/}node;//定义链栈typedefstructSnode{node*data;structSnode*next;}Snode;Snode*topnode*inputSnode*sSnode*p;node**outputnod
4、e*p,*q,*head;2.每个模块的分析:(1)主程序模块:intmain(){node*head;printf("请输入广义表:");head=create();printf("该广义表为:");print(head);getchar();getchar();return0;}(1)广义表的创建:node*create(){node*p,*q,*head;/*指针p是一个移动指针,指针q用以开辟新节点,head为头指针*/charx;/*输入字符*/Snode*top;/*栈顶指针*/top=NULL;/*栈顶置空*/q=(node*)mal
5、loc(sizeof(node));/*申请新节点*/q->tag=1;/*广义表形式第一个字符必为左括号*/scanf("%c",&x);/*输入字符*/head=q;/*广义表头结点指向新开辟节点*/p=head;/*活动指针指向头结点*/top=Push(top,p);/*该节点指针入栈*/q=(node*)malloc(sizeof(node));/*开辟新节点*/q->tag=-1;/*新节点标记为-1*/p->hp=q;/*上一个读到的是左括号,将新节点链到当前节点的子表*/p->tag=1;/*当前节点为左括号,标记为1*/p->data=N
6、ULL;/*当前节点数据域为空*/p=p->hp;/*活动指针移到当前节点的子表*/scanf("%c",&x);/*接着输入数据*/while(top!=NULL)/*遇到左括号进栈,右括号退栈,栈空循环结束*/{if(x=='(')/*遇到左括号*/{q=(node*)malloc(sizeof(node));/*申请新节点*/q->tag=-1;/*新节点标记均为-1*/p->hp=q;/*新节点链到当前节点的子表*/p->tag=1;/*因是左括号,当前节点标记为1*/p->data=NULL;/*数据域为空*/top=Push(top,p);/*
7、指针入栈*/p=p->hp;/*移动指针到当前节点的子表*/}elseif(x==',')/*遇到逗号*/{q=(node*)malloc(sizeof(node));/*申请新节点,标记-1*/q->tag=-1;p->tp=q;/*新节点链到当前节点后续节点*/p=p->tp;/*移动指针到当前节点的后续*/}elseif(x==')')/*遇到右括号*/{p->tp=NULL;/*后续域置空*/top=Pop(top,&p);/*栈顶指针退栈*/}else/*遇到其他字符*/{p->tag=0;/*标记为0*/p->data=x;/*数据域存数据*/
8、p->hp=NULL;/*子表指向置空*/}scanf("%c",