2018-01-14 09:40:39 king_cannon_fodder 阅读数 32087

答案链接: https://pan.baidu.com/s/18lcjOBJHkt2HdCOeIz0DHw

密码: az5g

其他相关资料:https://pan.baidu.com/s/1ysDZFxCGv2tkJQ3BO-N71g

课件密码:91310

-----------------------------------------------------------------------------------------------------------------

ps:如果打不开可能是网络的原因,不是边疆地区的话那就换台电脑或者用手机打开。

2016-07-07 01:17:19 mumuriyue 阅读数 834

书的全称是《数据结构教程(第3版)上机实验指导》,在第5章——数组和稀疏矩阵的实验5.3中,

由对称矩阵M的第i行和第j列的元素的数据存储在一维数组A中的位置k的计算公式,书中写的是:


起初没有多想,但在后来程序运行的过程中,发现运行结果很奇怪,存储压缩矩阵的数组a中的10个元素没有用完,后来仔细分析发现是公式搞错了(程序中的公式也是错的),

正确的公式如下:


差了一个符号,运行修改后的程序,结果正确。

2018-10-17 21:40:15 foolishpichao 阅读数 136
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node
{
	char data;
	struct node* lchild;
	struct node* rchild;
}BTNode;
void GreatBTree(BTNode *&b,char *str);
void DispBTree(BTNode *b);
void DestroyBTree(BTNode * &b);
BTNode *FindNode(BTNode *b,char x);
BTNode *LchildNode(BTNode *p);
int BTHeight(BTNode *b);
int main()
{
	BTNode *b,*p; 
	char str[100],x='B';
	scanf("%s",str);
	GreatBTree(b,str);
	DispBTree(b);
	p=FindNode(b,x);
	printf("%c\n",p->data);
	p=LchildNode(b);
	printf("%c\n",p->data);
	//int a;
	printf("%d\n",BTHeight(b));
	return 0;
}

void GreatBTree(BTNode *&b,char *str)
{
	BTNode *St[100],*p;
	int top=-1,k,j=0;
	char ch;
	b=NULL;
	ch=str[j];
	while(ch!='\0')
	{
		switch(ch)
		{
			case '(':top++;St[top]=p;k=1;break;
			case ')':top--;break;
			case ',':k=2;break;
		    default :
		    	p=(BTNode *)malloc(sizeof(BTNode));
		    	p->data=ch;
		    	p->lchild=p->rchild=NULL;
		    	if(b==NULL)
		    	b=p;
		    	else
		    	{
		    		switch(k)
		    		{
		    			case 1 :St[top]->lchild=p;break;
		    			case 2 :St[top]->rchild=p;break;
					}
				}
		}
		j++;
		ch=str[j];
	}	
}


void DispBTree(BTNode *b)
{
	if(b!=NULL)
	{
		printf("%c",b->data);
		if(b->lchild!=NULL||b->rchild!=NULL) 
		{
			printf("(");
			DispBTree(b->lchild);
			if(b->rchild!=NULL)
			printf(",");
			DispBTree(b->rchild);
			printf(")");
		}
	}
	
}

void DestroyBTree(BTNode* &b)
{
	if(b!=NULL)
	{
		DestroyBTree(b->lchild);
		DestroyBTree(b->rchild);
		free(b);
	}
}

BTNode *FindNode(BTNode *b,char x)
{
	BTNode *p;
	if(b==NULL)
	return NULL;
	else if(b->data==x)
	return b;
	else
	{
		p=FindNode(b->lchild,x);
		if(p!=NULL)
		return p;
		else
		return FindNode(b->rchild,x); 
	}
}


BTNode *LchildNode(BTNode *p)
{
	return p->lchild;
 } 

int BTHeight(BTNode *b)
{
	int lchild,rchild;
	if(b==NULL) return 0;
	else
	{
		lchild=BTHeight(b->lchild);
		rchild=BTHeight(b->rchild);
		return (lchild>rchild)?(lchild+1):(rchild+1); //不能用lchild++
	}
}

 

2019-12-23 11:06:45 weixin_43342105 阅读数 5
//文件名:algo3-2.cpp
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct linknode
{
	ElemType data;				//数据域
	struct linknode *next;		//指针域
} LiStack;
void InitStack(LiStack *&s)
{
	s=(LiStack *)malloc(sizeof(LiStack));
	s->next=NULL;
}
void ClearStack(LiStack *&s)
{
	LiStack *p=s->next;
	while (p!=NULL)
	{
		free(s);
		s=p;
		p=p->next;
	}
}
int StackLength(LiStack *s)
{
	int i=0;
	LiStack *p;
	p=s->next;
	while (p!=NULL)
	{
		i++;
		p=p->next;
	}
	return(i);
}
int StackEmpty(LiStack *s)
{
	return(s->next==NULL);
}
void Push(LiStack *&s,ElemType e)
{
	LiStack *p;
	p=(LiStack *)malloc(sizeof(LiStack));
	p->data=e;
	p->next=s->next;		//插入*p结点作为第一个数据结点
	s->next=p;
}
int Pop(LiStack *&s,ElemType &e)
{
	LiStack *p;
	if (s->next==NULL)		//栈空的情况
		return 0;
	p=s->next;				//p指向第一个数据结点
	e=p->data;
	s->next=p->next;
	free(p);
	return 1;
}
int GetTop(LiStack *s,ElemType &e)
{
	if (s->next==NULL)		//栈空的情况
		return 0;
	e=s->next->data;
	return 1;
}
void DispStack(LiStack *s)
{
	LiStack *p=s->next;
	while (p!=NULL)
	{
		printf("%c ",p->data);
		p=p->next;
	}
	printf("\n");
}
//文件名:exp3-2.cpp
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct linknode
{
	ElemType data;				//数据域
	struct linknode *next;		//指针域
} LiStack;
extern void InitStack(LiStack *&s);
extern void ClearStack(LiStack *&s);
extern int StackLength(LiStack *s);
extern int StackEmpty(LiStack *s);
extern void Push(LiStack *&s,ElemType e);
extern int Pop(LiStack *&s,ElemType &e);
extern int GetTop(LiStack *s,ElemType &e);
extern void DispStack(LiStack *s);
void main()
{
	ElemType e;
	LiStack *s;
	printf("(1)初始化链栈s\n");
	InitStack(s);
	printf("(2)链栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("(3)依次进链栈元素a,b,c,d,e\n");
	Push(s,'a');
	Push(s,'b');
	Push(s,'c');
	Push(s,'d');
	Push(s,'e');
	printf("(4)链栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("(5)链栈长度:%d\n",StackLength(s));
	printf("(6)从链栈顶到链栈底元素:");DispStack(s);
	printf("(7)出链栈序列:");
	while (!StackEmpty(s))
	{	Pop(s,e);
		printf("%c ",e);
	}
	printf("\n");
	printf("(8)链栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("(9)释放链栈\n");
	ClearStack(s);
}
2019-11-12 23:38:12 weixin_45092452 阅读数 120

李春葆《数据结构》第五版

第二章:线性表
实验一:实现顺序表各种基本运算的算法

#include <stdio.h>
#include <malloc.h>
#define Maxsize 50
typedef char Elemtype;
typedef struct 
{Elemtype data[Maxsize];
int length;
}sqlist ;
void createlist(sqlist*&l,Elemtype a[ ],int n)
{l=(sqlist*)malloc(sizeof(sqlist));
for(int i=0;i<n;i++)
	l->data[i]=a[i];
l->length =n;
}
void initlist(sqlist*&l)
{l=(sqlist*)malloc(sizeof(sqlist));
l->length =0;
}
void destroylist (sqlist*&l)
{ free(l);
}
bool listempty (sqlist*l)
{ return (l->length==0);
}
int listlength (sqlist*l)
{ return (l->length);
}
void  displist(sqlist*l)
{for(int i=0;i<l->length;i++)
printf("%c",l->data[i]);
printf("\n");
}
bool getelem (sqlist*l,int i,Elemtype &e)
{if(i<1||i>l->length) 
return false;
e=l->data[i-1];
return true;
}
int locateelem (sqlist*l,Elemtype e)
{int i=0;
while(i<l->length&&l->data[i]!=e)
	i++;
if(i>=l->length)
	return 0;
else 
	return i+1;
}
bool listinsert (sqlist*&l,int i,Elemtype e)
{int j;
if(i<1||i>l->length+1) 
	return false;
i--;
for(j=l->length;j>i;j--)
	l->data[j]=l->data[j-1];
l->data[i]=e;
l->length++;
return true ;
}
bool listdelete (sqlist*&l,int i,Elemtype &e)
{int j;
if(i<1||i>l->length)
	return false ;
i--;
e=l->data[i];
for (j=i;j<l->length-1;j++)
	l->data[j]=l->data[j+1];
l->length --;
return true;
}

主函数程序如下:
int main()
{ sqlist *l;
Elemtype e;
printf("顺序表的基本运算如下:\n");
printf("(1)初始化顺序表l\n");
initlist(l);
printf("(2)依次插入a,b,c,d,e元素\n");
listinsert(l,1,'a');
listinsert(l,2,'b');
listinsert(l,3,'c');
listinsert(l,4,'d');
listinsert(l,5,'e');
printf("(3)输出顺序表l:");displist(l);
printf("(4)顺序表l长度:%d\n",listlength(l));
printf("(5)顺序表l为%s\n",(listempty(l)?"空":"非空"));
getelem(l,3,e);
printf("(6)顺序表l的第3个元素:%c\n",e);
printf("(7)元素a的位置:%d\n",locateelem(l,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
listinsert(l,4,'f');
printf("(9)输出顺序表l:");displist(l);
printf("(10)删除l的第3个元素:\n");
listdelete(l,3,e);
printf("(11)输出顺序表l:");displist(l);
printf ("(12)释放顺序表l\n");
destroylist(l);
return 1;
}

实验结果:
在这里插入图片描述

这里是引用
李春葆《数据结构教程 上机实验指导》

没有更多推荐了,返回首页