第十三周知识总结

mju3197103150 mju3197103150     2022-12-15     725

关键词:

1.括号匹配问题

部分代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stack_list_parenthesis.h"

// 检查字符串 str 是否全部是全括号 ‘(‘, ‘)‘, ‘[‘, ‘]‘, ‘‘, 或 ‘‘。
int allParenthesis(char *str)
int i; // 循环变量。

for (i=0; i<strlen(str); i++)
if (!(str[i]==‘(‘ || str[i]==‘)‘ || // 找到一个非括号字符,返回 0。
str[i]==‘[‘ || str[i]==‘]‘ ||
str[i]==‘‘ || str[i]==‘‘)) return 0;

return 1; // 所有字符都是括号,返回 1。

// 检查两个字符是否匹配。
int isMatching(char e, char c)
// 返回匹配的圆括号、方括号、或花括号。
return (e==‘(‘ && c==‘)‘) || (e==‘[‘ && c==‘]‘) || (e==‘‘ && c==‘‘);

// 检查字符串 str 是否括号匹配。
int parenthesisMatching(char *str)
Stack S; // 检查括号匹配的栈。
char e; // 存放出栈的字符。
int matching = 1; // 括号匹配旗标。
int i; // 循环变量。

initial(&S);

for (i=0; i<strlen(str) && matching; i++) // 扫描字符串 str。
if (str[i]==‘(‘ || str[i]==‘[‘ || str[i]==‘‘) // 若是左括号,
push(&S, str[i]); // 将字符入栈。
else
e = pop(&S); // e 是从 S 出栈的字符。
// 若出栈的左括号和目前的右括号不匹配,旗标设为假值。
if (!isMatching(e, str[i])) matching = 0;


if (matching==1 && is_empty(S)) matching = 1; // 若栈已空,旗标设为真值。
else matching = 0; // 否则,旗标设为假值。

clear(&S); // 清空栈。
return matching; // 返回旗标。

int main(void)
char str[100]; // 括号字符串指针。

do // 重复括号匹配检查,直至 str 为空字符串。
do // 读入一个全括号的字符串。
printf("读入一个全括号的字符串 (‘(‘, ‘)‘, ‘[‘, ‘]‘, ‘‘, ‘‘):");
scanf("%s", &str);
if (!strcmp(str, "stop")) return 0; // 若字符串是 "stop",则终止程序。
while (!allParenthesis(str));

if (parenthesisMatching(str)) printf("**** 字符串 %s 是全括号匹配。 ", str);
else printf("**** 字符串 %s 不是全括号匹配。 ", str);

printf("---------------------------------------- "); // 打印分隔线。
while (strlen(str)!=0);

2.单链表

部分代码:

// 将元素 e 插入到 L 适当的位置。插入完成时,返回 e 的位置。
int insert(List *L, ElemType e)
Link current = *L; // 指向目前的节点。
Link previous = NULL; // 指向前一个节点,开始时为空。
Link newNode; // 新节点的指针。
int position = 0; // 目前节点位置。

if (*L==NULL) // Case 1:线性表是空的。
newNode = (Link) malloc(sizeof(Node)); // 要求一个新节点的内存。
newNode->elem = e; // 设定头节点的数据。
newNode->next = NULL; // 设定头节点的链。
*L = newNode; // 线性表指向第一个节点。
return 0; // 返回头节点位置。


do // 检查目前的节点。
if (current->elem>=e) // Cases 2 & 3: 找到插入位置,插在这个节点之前。
newNode = (Link) malloc(sizeof(Node)); // 要求一个新节点的内存。
newNode->elem = e; // 设定新节点的数据。
newNode->next = current; // 设定新节点的链。
if (previous==NULL) *L = newNode; // Case 2: 插入线性表的头节点。
else previous->next = newNode; // Case3:修改前一节点的链。
return position; // 返回位置。

else
previous = current; // 将目前的节点设为前一个节点。
current = current->next; // 将下一个节点设为下一步骤的目前节点。
position++; // 位置加 1。

while (current!=NULL); // 若线性表还有节点,继续。

// Case 4:while 循环结束,没有执行返回,移到链结表的最后节点。
newNode = (Link) malloc(sizeof(Node)); // 要求一个新节点的内存。
newNode->elem = e; // 设定新节点的数据。
newNode->next = NULL; // 最后的节点,将其下一个节点设为空值。
previous->next = newNode; // 将新增节点放在线性表的最后。
return position; // 返回位置。

3.一元多项式

部分代码:

// 将一个项加到多项式线性表 ,依照项次递减顺序。 若项次不存在,
// 插入该项次;若项次已存在,判断最后的参数 flag 旗标,flag==1 时,
// 将系数的值相加;为 0 时,取代原系数。最后,返回系数的值。
Coefficient addTerm(Poly *P, ElemType e, int flag)
Link current = *P; // 指向目前的节点。
Link previous = NULL; // 指向前一个节点,开始时为空。
Link newNode; // 新节点的指针。

if (*P==NULL) // 线性表是空的。
newNode = (Link) malloc(sizeof(Term)); // 要求一个新节点的内存。
newNode->elem.degr = e.degr; // 设定头节点的项次。
newNode->elem.coef = e.coef; // 设定头节点的系数。
newNode->next = NULL; // 设定头节点的链。
*P = newNode; // 线性表指向第一个节点。
return 0; // 返回头节点位置。


do // 检查目前的节点。
if (current->elem.degr==e.degr) // 找到同次项,修改这个项的系数。
if (flag==1) // 旗标是累加系数
current->elem.coef += e.coef; // 累加系数。
else current->elem.coef = e.coef; // 替换系数。
return current->elem.coef; //返回系数。

if (current->elem.degr<e.degr) // 找到插入新项的位置,插在这个项之前。
newNode = (Link) malloc(sizeof(Term)); // 要求一个新节点的内存。
newNode->elem.degr = e.degr; // 设定新项的项次。
newNode->elem.coef = e.coef; // 设定新项的系数。
newNode->next = current; // 设定新项的链。
if (previous==NULL) *P = newNode; // Case 2: 插入多项式的头节点。
else previous->next = newNode; // Case3:修改前项的链。
return newNode->elem.coef; // 返回系数。

else
previous = current; // 将目前的节点设为前一个项。
current = current->next; // 将下一个节点设为下一步骤的目前的项。

while (current!=NULL); // 若线性表还有节点,继续。

// Case 4:while 循环结束,没有执行返回,移到最末项。
newNode = (Link) malloc(sizeof(Term)); // 要求一个新节点的内存。
newNode->elem.degr = e.degr; // 设定新项的项次。
newNode->elem.coef = e.coef; // 设定新项的系数。
newNode->next = NULL; // 最后一项,将其下一个项设为空值。
previous->next = newNode; // 将新增节点放在线性表的最后。
return newNode->elem.coef; // 返回系数。

// 从多项式线性表移除一个项次。若该项次存在,移除项次,并返回该
// 项次的系数;否则,返回 0。
Coefficient removeTerm(Poly *P, Degree degree)
Link current = *P; // 指多项式的首项。
Link previous; // 指向前一项。
Coefficient coef; // 移除项的系数。

while (current!=NULL) // 当多项式还有项。
if (current->elem.degr==degree) // 找到要移除的项。
coef = current->elem.coef; // 移除项的系数。
if (current==*P) // 移除项是头首项。
*P = current->next; // 设定下一项为首项。
free(current); // 释放移除的项。
return coef; // 返回移除项的系数。

else
previous->next = current->next; // 将前一个项的链指向目前的下一项。
free(current); // 放移除的项。
return coef; // 返回移除项的系数。


else if (current->elem.degr>degree)
previous = current; // 将目前的节点设为前一个节点。
current = current->next; // 将下一个节点设为下一步骤的目前节点。

else return 0.0; // 目前项次小于移除的项次;删除失败。

return 0.0; // 已经没有项,移除失败。

第十三周计划总结

查看详情

第十三周计划总结

查看详情

201771010125王瑜《面向对象程序设计(java)》第十三周学习总结(代码片段)

...     201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结一.理论部分1.上周学习了GUI为用户提供的交互式的图形化操作界面;AWT包组件,Component组件,Container容器以及Swing组件等;而这周则主要学习到了事件处理... 查看详情

杨玲201771010133《面向对象程序设计(java)》第十三周学习总结(代码片段)

 《面向对象程序设计(java)》第十三周学习总结第一部分:理论知识学习部分1、事件源(eventsource):能够产生事件的对象都可以成为事件源,如文本框、按钮等。一个事件源是一个能够注册监听器并向监听器发送事件对... 查看详情

达拉草201771010105《面向对象程序设计(java)》第十三周学习总结(代码片段)

达拉草201771010105《面向对象程序设计(java)》第十三周学习总结第一部分:理论知识事件处理基础:事件源:能够产生事件的对象都可以成为事件源,如文本框、按钮等。一个事件源是一个能够注册监听器并向监听器发送事件... 查看详情

201771010137赵栋《面向对象程序设计(java)》第十三周学习总结(代码片段)

             第一部分:理论知识 第11章事件处理(事件处理基础; 动作; 鼠标事件;AWT事件继承层次)1.事件源(eventsource):能够产生事件的对象都可以成为事件源,如文本... 查看详情

201771010110孔维滢《面向对象程序设计(java)》第十三周学习总结(代码片段)

理论知识部分1.监听器:监听器类必须实现与事件源相对应的接口,即必须提供接口中方法的实现。           监听器接口方法实现            &nbs... 查看详情

王颖奇20171010129《面向对象程序设计(java)》第十三周学习总结(代码片段)

 实验十三 图形界面事件处理技术实验时间2018-11-221、实验目的与要求(1)掌握事件处理的基本原理,理解其用途;(2)掌握AWT事件模型的工作机制;(3) 掌握事件处理的基本编程模型;(4)了解GUI界面组件观感设置方法;(5)... 查看详情

201771010124王海珍《面向对象设计java》第十三周实验总结

理论知识:事件处理1.事件源:能够产生事件的对象都可以成为事件源,如文本框,按钮等。一个事件源是一个能够注册监听器并向监听器发送事件对象的对象。2.事件监听器:事件监听器对象接收事件源发送的通告(事件对象... 查看详情

狄慧201771010104《面向对象程序设计(java)》第十三周学习总结(代码片段)

实验十三 图形界面事件处理技术实验时间2018-11-22一、知识点总结 1、AWT事件处理机制的概要:1>监听器对象是一个实现了特定监听器接口的类的实例;2>事件源是一个能够注册监听器对象并发送事件对象的对象;3>... 查看详情

第十三周编程总结--助教

题目1使用函数计算两点间的距离(1)实验代码#include<stdio.h>#include<math.h>doubledist(doublex1,doubley1,doublex2,doubley2);intmain()      doublex1,y1,x2,y2;   sca 查看详情

201771010118马昕璐《面向对象程序设计(java)》第十三周学习总结(代码片段)

 第一部分:理论知识学习部分 事件处理基础 1.事件源(eventsource):能够产生事件的对象都可以成为事件源。一个事件源是一个能够注册监听器并向监听器发送事件对象的对象。 2.事件监听器(eventlistener):事... 查看详情

201771010130王志成《面向对象程序设计(java)》第十三周总结(代码片段)

理论学习知识:?事件源(eventsource):能够产生事件的对象都可以成为事件源,如文本框、按钮等。一个事件源是一个能够注册监听器并向监听器发送事件对象的对象。?事件监听器(eventlistener):事件监听器对象接收事件源发... 查看详情

王之泰201771010131《面向对象程序设计(java)》第十三周学习总结(代码片段)

第一部分:理论知识学习部分 第11章事件处理 11.1事件处理基础a)事件源(eventsource):能够产生事件的对象都可以成为事件源,如文本框、按钮等。一个事件源是一个能够注册监听器并向监听器发送事件对象的对象。b)事... 查看详情

马凯军201771010116《面向对象与程序设计java》第十三周学习总结(代码片段)

实验十三 图形界面事件处理技术实验时间2018-11-22理论知识与学习部分事件处理基础 事件源(eventsource):能够产生事件的对象都可以成为事件源,如文本框、按钮等。一个事件源是一个能够注册监听器并向监听器发送事... 查看详情

刘志梅2017710101152.《面向对象程序设计(java)》第十三周学习总结(代码片段)

实验十三 图形界面事件处理技术实验时间2018-11-221、理论知识(1)任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的事件。JAVA这样的面向对象语言,都将事件的相关的信息封装在一个事件对象中。不同的事件源可以... 查看详情

李晓菁201771010114《面向对象程序设计(java)》第十三周学习总结(代码片段)

理论知识:事件处理1.事件源:能够产生事件的对象都可以成为事件源,如文本框,按钮等。一个事件源是一个能够注册监听器并向监听器发送事件对象的对象。2.事件监听器:事件监听器对象接收事件源发送的通告(事件对象... 查看详情

第十三周进度

时间十三周学习时间97小时代码量3028行所学知识android开发中一些高级空间的应用,比如ViewPager,DrawLayout等等   查看详情