数据结构和算法实验指导书 下载本文

WORD格式可编辑 printf(\请输入%d个数用空格隔开:\\n\

for(i=0;i

p=(SLIST*)malloc(sizeof(SLIST)); scanf(\ wei->next=p; wei=p; }

wei->next=tou->next; //令最后一个原素指向首元结点成环 return tou; }

void outlist(SLIST *h,int m,int c) {

int i;

SLIST *p,*shanchu; //用于遍历的指针p,用于删除的指针shanchu p=h->next; //p指向首元结点

while(p!=p->next) //当环中只剩下一个原素时结束 {

for(i=1;i

p=p->next; }

shanchu=p->next; //shanchu指向当前要剔除的节点 printf(\

p->next=shanchu->next; //将shanchu指针指向的节点出环 free(shanchu); p=p->next; }

printf(\ //输出最后的一个节点的内容 free(p); free(h); }

main( )

{ SLIST *head; int m,c;

printf(\请分别输入m和c的值:\ scanf(\ head=creatlist(m); outlist(head,m,c); }

专业知识分享

WORD格式可编辑

四、实验报告要求 1、撰写实验报告;

2、对实验中出现的问题和结果进行总结。

专业知识分享

WORD格式可编辑 实验三 栈的实现和应用

一、实验目的

1、掌握栈的建立方法;

2、掌握栈的基本操作,如入栈、出栈、判断空栈等; 3、栈的应用。 二、实验内容

1、顺序栈的初始化 2、判断栈是否为空 3、顺序栈出栈 4、顺序栈入栈

5、栈的应用--汉诺塔 三、实验提示

1、栈的基本操作,按提示将函数补充完整 #include #include #define STACK_MAX 100 typedef struct{ int top;

int data[STACK_MAX]; } stack;

void init(stack *st) /*初始化顺序栈*/ {

st->top=0; }

int Empty(stack *st)/*判断栈是否为空*/ {

if(st->top==0)

return 0; //空0 else

return 1; //非空1 }

int pop(stack *st) /*出栈*/ {

return st->data[--st->top]; }

void push(stack *st,int data) /*入栈*/ {

st->data[st->top++]=data; }

int main(void) {

专业知识分享

WORD格式可编辑 stack st; init(&st); push(&st,5); push(&st,6);

printf(\ return 0; }

2、#include void main() {

void hanoi(int n,char one,char two,char three); /* 对hanoi函数的声明 */ int m;

printf(\ scanf(\

printf(\ hanoi(m,'A','B','C'); }

void hanoi(int n,char one,char two,char three)

/* 定义hanoi函数,将n个盘从one座借助two座,移到three座 */ {

static k=1; //定义静态变量k用来标明走了多少步

void move(char x,char y); //因为move函数定义在该函数的后边且之前咩有声明 在此需要提前声明才能使用

if(n==1) //当第一个座上仅剩一个盘的时候将此盘移到第三个上

{

printf(\第%d步:\ //输出是第多少步 move(one,three); //移动 } else {

hanoi(n-1,one,three,two); //将前n-1个盘从第一个座移到二个座上,第三个座当桥梁

printf(\第%d步:\ move(one,three);

hanoi(n-1,two,one,three); //将上边转移到第二个座上的盘转移到第三个盘上,第一个盘当桥梁

}

专业知识分享