ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

严蔚敏数据结构习题第五章

2022-02-20 10:04:55  阅读:175  来源: 互联网

标签:struct int ++ 严蔚敏 ATOM 习题 数据结构 data ptr


https://www.jianshu.com/p/d7d5545012e2
习题答案:https://www.cnblogs.com/kangjianwei101/p/5229548.html

1 && 2

在这里插入图片描述
在这里插入图片描述
//注意行列存储
在这里插入图片描述
在这里插入图片描述

10

广义表最基本的操作:取表头head(LS)与取表尾tail(LS)
https://blog.csdn.net/qq_38842021/article/details/82290201

head() 返回列表的第一个元素;
tail() 返回列表的删去第一个元素之后的剩余列表;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11

在这里插入图片描述

12

在这里插入图片描述

13

在这里插入图片描述

19

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//这个没有办法找到所有的,只能找到一行中前面的
#include <stdio.h>
#include <stdlib.h>
#define m 5
#define n 4
typedef struct Node
{
	int row;//行
	int col;//列
	int data;
};

void SaddlePoint(int a[m][n])
{
	Node s[20];
	int max, min, i, j, k=0;
	int q = 0;
	for (i = 0; i < m; i++)
	{
		min = a[i][0];
		for (j = 0; j < n; j++)//找行最小值
		{
			if (min > a[i][j])
			{
				min = a[i][j];
				k = j;//k是最小值的列数
			}
		}
		max = a[i][k];
		for (j = 0; j < n; j++)//找k列的最大值
		{
			if (max < a[j][k])
			{
				max = a[j][k];
			}
		}
		if (max == min)//找到的最值比较,相同表明是马鞍点
		{
			s[q].col = i;
			s[q].row = k;
			s[q].data = a[i][k];
			printf("鞍点行数为 %d 列数为%d 值为 %d \n", s[q].row + 1, s[q].col + 1, s[q].data);
		}
	}
}

int main()
{
	int a[m][n] = {
		{3,6,4,9},
		{1,2,3,4},
		{9,9,9,9},
		{1,1,1,1},
		{2,3,1,1},
	};
	SaddlePoint(a);
	return 0;
}

21

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10

//三元组稀疏矩阵类型定义
typedef int ElemType;
typedef struct
{
	int i, j;//该非零元的行列下标
	ElemType e;
}Triple;
typedef struct
{
	Triple data[MAXSIZE + 1];//data[0]是不用的
	int mu, nu, tu;//矩阵的行列,非零元个数
}TSMatrix;

int AddSMatrix(TSMatrix M, TSMatrix N, TSMatrix *Q)
{
	int m, n, q;
	if (M.mu != N.mu || M.nu != N.nu)//判断两矩阵的行列是否相同
	{
		printf("两个矩阵不能相加\n");
		return 0;
	}
	Q->mu = M.mu;//给Q赋值
	Q->nu = M.nu;
	Q->tu = 0;
	m = n = q = 1;
	while (m <= M.tu && n <= N.tu)//遍历对比,行列相同的相加
	{
		if (M.data[m].i < N.data[n].i)
		{
			Q->data[q] = M.data[m];
			m++;
		}
		else if (M.data[m].i > N.data[n].i)
		{
			Q->data[q] = N.data[n];
			n++;
		}
		else //M的行与N的行相同
		{
			if (M.data[m].j < N.data[n].j)
			{
				Q->data[q] = M.data[m];
				m++;
			}
			else if (M.data[m].j > N.data[n].j)
			{
				Q->data[q] = N.data[n];
				n++;
			}
			else//M的列=N的列
			{
				if (M.data[m].e + N.data[n].e)
				{
					Q->data[q].i = M.data[m].i;
					Q->data[q].j = M.data[m].j;
					Q->data[q].e = M.data[m].e + N.data[n].e;
					m++;
					n++;
				}
				else
				{
					m++;
					n++;
				}
			}
		}
		q++;
		Q->tu++;
	}
	while (m <= M.tu)
	{
		Q->data[q] = M.data[m];
		m++;
		q++;
		Q->tu++;
	}
	while (n <= N.tu)
	{
		Q->data[q] = N.data[n];
		n++;
		q++;
		Q->tu++;
	}
	return 0;
}

30

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//广义表的头尾链表存储表示 p109
typedef enum {ATOM,LIST}ElemTag;//ATOM==0:原子,LIST==1:子表
typedef struct GLNode
{
	ElemTag tag; //区分原子节点和表节点
	union
	{
		int atom; //值域
		struct 
		{
			struct GLNode* hp, * tp; //ptr是表节点的指针域,ptr.hp和ptr.tp分别指向表头表尾
		}ptr;
	};
}*GList;

int GListDepth(GList& L)
{
	int depth = 0;
	int hpdepth, tpdepth;//表头表尾深度
	if (!L) return 1;//空表深度为1
	if (L->tag = ATOM) return 0;//原子深度为0
	hpdepth = GListDepth(L->ptr.hp) + 1;
	tpdepth = GListDepth(L->ptr.tp);
	return hpdepth > tpdepth ? hpdepth : tpdepth;
}

分割线

typedef enum {ATOM,LIST} ElemTag;
typedef struct GLNode{
     ElemTag tag;
     union {
       char atom;
       struct { 
         GLNode *hp, *tp;
       } ptr;
     }un;
} *GList;
int GListDepth(GList ls)
{
    GList pp;
    int max, h, t;
    if(!ls)
       return 1;
    if(ls->tag == ATOM)
       return 0;
    for(pp=ls; pp; pp=pp->un.ptr.tp){
       h = GListDepth(pp->un.ptr.hp)+1;
       t = GListDepth(pp->un.ptr.tp);
       if(h > t)
           return h;
       else
           return t;
    }          
}

32

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//广义表的头尾链表存储表示 p109
typedef enum { ATOM, LIST }ElemTag;//ATOM==0:原子,LIST==1:子表
typedef struct GLNode
{
	ElemTag tag; //区分原子节点和表节点
	union
	{
		int atom; //值域
		struct
		{
			struct GLNode* hp, * tp; //ptr是表节点的指针域,ptr.hp和ptr.tp分别指向表头表尾
		}ptr;
	};
}*GList;

int GListCompare(GList& L1, GList& L2)
{
	if (!L1 && !L2) //表1,2都为空,表示他们相同
		return 1;
	if (L1 && L2)//两个表都不为空
	{
		if (L1->tag == L2->tag)
		{
			if (L1->tag == ATOM)//如果是原子节点
			{
				if (L1->atom == L2->atom)
					return 1;
			}
			else
			{
				if (GListCompare(L1->ptr.hp, L2->ptr.hp))
					if (GListCompare(L1->ptr.tp, L2->ptr.tp))
						return 1;
			}
		}
	}
	return 0;
}

33

#include <stdio.h>
#include <stdlib.h>
//广义表的头尾链表存储表示 p109
typedef enum { ATOM, LIST }ElemTag;//ATOM==0:原子,LIST==1:子表
typedef struct GLNode
{
	ElemTag tag; //区分原子节点和表节点
	union
	{
		int atom; //值域
		struct
		{
			struct GLNode* hp, * tp; //ptr是表节点的指针域,ptr.hp和ptr.tp分别指向表头表尾
		}ptr;
	};
}*GList;

void Get(GList L, int a)//a的初赋值为0
{
	int i = a;
	if (L)
	{
		if (L->tag == ATOM)
			printf("%c -> 第%d层\n", L->atom, i);
	}
	if (L->tag == LIST)
	{
		Get(L->ptr.hp, i + 1);
		Get(L->ptr.tp, i );
	}
}

38

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//广义表的头尾链表存储表示 p109
typedef enum { ATOM, LIST }ElemTag;//ATOM==0:原子,LIST==1:子表
typedef struct GLNode
{
	ElemTag tag; //区分原子节点和表节点
	union
	{
		int atom; //值域
		struct
		{
			struct GLNode* hp, * tp; //ptr是表节点的指针域,ptr.hp和ptr.tp分别指向表头表尾
		}ptr;
	};
}*GList;

void Get_L_ATOM(GList L, int l, int a)//a的初值赋值是0
{
	int i = a;
	if (L && l >= i)
	{
		if (L->atom == ATOM)
		{
			if (l == i)
				printf("%c", L->atom);
		}
		else
		{
			Get_L_ATOM(L->ptr.hp, l, i + 1);
			Get_L_ATOM(L->ptr.hp, l, i);
		}
	}
}

标签:struct,int,++,严蔚敏,ATOM,习题,数据结构,data,ptr
来源: https://blog.csdn.net/han29_/article/details/115439652

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有