C //练习 6-5 编写函数undef,它将从由lookup和install维护的表中删除一个变量及其定义。

这篇具有很好参考价值的文章主要介绍了C //练习 6-5 编写函数undef,它将从由lookup和install维护的表中删除一个变量及其定义。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C程序设计语言 (第二版) 练习 6-5

练习 6-5 编写函数undef,它将从由lookup和install维护的表中删除一个变量及其定义。

注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010

 文章来源地址https://www.toymoban.com/news/detail-812534.html

代码块:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define HASHSIZE 101

struct nlist {
    struct nlist *next;
    char *name;
    char *defn;
};

static struct nlist *hashtab[HASHSIZE];

unsigned hash(char *s) {
    unsigned hashval;

    for(hashval = 0; *s != '\0'; s++){
        hashval = *s + 31 * hashval;
	}
    return hashval % HASHSIZE;
}

char *_strdup(char *s){
    char *p;

    p = (char *) malloc(strlen(s) + 1);
    if (p != NULL){
        strcpy(p, s);
	}
    return p;
}

struct nlist *lookup(char *s){
    struct nlist *np;

    for(np = hashtab[hash(s)]; np != NULL; np = np->next){
        if (strcmp(s, np->name) == 0){
            return np;
		}
	}
    return NULL;
}

struct nlist *install(char *name, char *defn){
    struct nlist *np;
    unsigned hashval;

    if ((np = lookup(name)) == NULL){
        np = (struct nlist *) malloc(sizeof(*np));
        if(np == NULL || (np->name = _strdup(name)) == NULL){
            return NULL;
		}
        hashval = hash(name);
        np->next = hashtab[hashval];
        hashtab[hashval] = np;
    }
	else{
        free((void *) np->defn);
	}
    if ((np->defn = _strdup(defn)) == NULL){
        return NULL;
	}
    return np;
}

int undef(char * name){
    struct nlist * np1, * np2;

    if ((np1 = lookup(name)) == NULL){
        return 1;
	}

    for(np1 = np2 = hashtab[hash(name)]; np1 != NULL; np2 = np1, np1 = np1->next){
        if (strcmp(name, np1->name) == 0){
            if(np1 == np2){
                hashtab[hash(name)] = np1->next;
			}
            else{
                np2->next = np1->next;
			}
            free(np1->name);
            free(np1->defn);
            free(np1);
            return 0;
        }
    }
    return 1;
}

int main(){

	system("pause");
	return 0;
}

到了这里,关于C //练习 6-5 编写函数undef,它将从由lookup和install维护的表中删除一个变量及其定义。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Excel:通过Lookup函数提取指定文本关键词

    函数公式 :=LOOKUP(9^9,FIND($G 2 : 2: 2 : G 6 , C 2 ) , 6,C2), 6 , C 2 ) , G 2 : 2: 2 : G$6) 公式解释 : lookup第一参数为9^9:代表的是一个极大值的数据,查询位置里面最接近这一个值的数据; lookup第二参数用find函数代替,目的就是查询我们的在对应文本找那个的位置; lookup第三参数

    2024年02月11日
    浏览(51)
  • Excel 公式的定义、语法和应用(LOOKUP 函数、HLOOKUP 函数、VLOOKUP 函数;MODE.MULT 函数; ROUND 函数)

    查找Excel公式使用方法的官方工具【强烈推荐!!!】:Excel 函数(按字母顺序)【微软官网】 excel 函数 说明 语法 LOOKUP 函数 在向量或数组中查找值 LOOKUP(lookup_value, lookup_vector, [result_vector]) HLOOKUP 函数 在数组的顶行中查找并返回指定单元格的值 HLOOKUP(lookup_value, table_array, r

    2024年04月26日
    浏览(40)
  • C语言-程序环境和预处理(2)--带副作用的宏参数,宏与函数的对比,#undef,条件编译,文件包含

    上一篇文章–《C语言-程序环境和预处理(1)》讲述了程序的翻译环境和执行环境,编译、连接,预定义符号,#define,#符号和##符号的相关知识。 链接: 《C语言-程序环境和预处理(1)》 本篇文章,讲述带副作用的宏参数,宏与函数的对比,#undef,条件编译,文件包含的相

    2024年02月08日
    浏览(61)
  • 元宇宙:它将如何影响人们的生活?

    元宇宙被誉为互联网的下一阶段,但它是什么? 当我们谈论元宇宙时,对我们来说它总是存在于某些方面。这不是一个新概念。很明显,在去年的过去六个月里,它获得了很多宣传,特别是因为 Facebook 的演示以及他们对 Meta 的更改。它提升了主题。 Metaverse 的基础是互连,即

    2024年02月11日
    浏览(43)
  • 【Shell编程练习】编写 shell 脚本,打印 9*9 乘法表

    输出Hello World 通过位置变量创建 Linux 系统账户及密码 监控内存和磁盘容量,小于给定值时报警 猜大小 输入三个数并进行升序排序 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态 运行结果: seq 是一个用于生成数字序列的命令。它的基本语

    2024年01月17日
    浏览(50)
  • vscode编写markdown文本,转换成pdf出现错误:“princexml” is required to be installed.

    在使用vscode进行编写markdown文档时,我们通过安装两个插件,分别是Markdown Preview Enhanced和Markdown PDF,分别实现对markdown文本的预览功能和格式转换功能(转化成PDF)。 当我们编写好一份markdown文本之后,点击右上角的 预览 按钮 之后在右侧弹出的预览界面的空白处右击鼠标,

    2024年02月03日
    浏览(44)
  • MATLAB练习题:编写程序将十进制正整数转换为对应的二进制字符向量

     讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。 MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili  编写程序将十进制正整数转换为对应的二进制字符向量。例如6对应的二进制字符向量为\\\'110\\\', 38对应的二进制字

    2024年02月02日
    浏览(49)
  • 【产品分析】高德手机地图产品:未来搜索将从地图开始

    未来的搜索从地图开始。今后的所有商务活动都将通过地图展开,使之成为兵家必争之地。要将移动流量变现为真金白银,地图将发挥至关重要的作用。 目前整个中国电子地图市场目前处于应用成熟期。在多年的快速发展和数次大型收购后,各互联网巨头已经基本完成了从地

    2024年02月12日
    浏览(55)
  • 函数-函数递归及练习

    目录 1、什么是递归? 2、递归的两个必要条件 3、递归的练习  3.1 接受一个整型值(无符号),按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量,求字符串的长度  3.3 求第n个斐波那契数 3.4 字符串逆序(递归实现)  总结 程序调用自身的编程技巧称为递归(

    2024年02月02日
    浏览(39)
  • 【Shell编程练习】编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态

    输出Hello World 通过位置变量创建 Linux 系统账户及密码 监控内存和磁盘容量,小于给定值时报警 猜大小 输入三个数并进行升序排序 要测试一个主机是否处于开机状态可以使用ping命令。 ping命令 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应

    2024年01月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包