精华内容
下载资源
问答
  • 顺序栈-初始化栈顶指针为01.头文件及类型定义2.顺序栈类型定义3.函数声明4.基本操作4.1 初始化顺序栈4.2 判空4.3 入栈4.4 出栈4.5 读取栈顶元素4.6 main函数5.小结 1.头文件及类型定义 #include<stdio.h> #...

    1.头文件及类型定义

    #include<stdio.h>
    #define MaxSize 10			//定义顺序栈中元素的最大个数
    #define ElemType int			
    

    2.顺序栈类型定义

    typedef struct {		
    	ElemType data[MaxSize];		//静态数组存放栈中元素
    	int top;					//栈顶指针,一般来说存放数组的下标
    }SeqStack;
    

    3.函数声明

    /*函数声明*/
    void InitStack(SeqStack& S);				//1.初始化顺序栈
    bool StackEmpty(SeqStack S);				//2.判空
    bool Push(SeqStack& S, ElemType x);			//3.入栈
    bool Pop(SeqStack& S, ElemType& x);			//4.出栈
    bool GetTop(SeqStack S, ElemType& x);		//5.读取栈顶元素
    

    4.基本操作

    4.1 初始化顺序栈

    //1.初始化栈
    void InitStack(SeqStack& S) {
    	S.top = 0;		//初始化栈顶指针为0
    }
    

    4.2 判空

    //2.判空
    bool StackEmpty(SeqStack S) {
    	return (S.top == 0);
    }
    

    4.3 入栈

    //3.入栈操作:新元素入栈(先存再加)
    bool Push(SeqStack& S, ElemType x) {
    	if (S.top == MaxSize)		//栈满,报错
    		return false;
    	S.data[S.top] = x;	//新元素先入栈:在栈顶指针所指位置放入x
    	S.top++;		//栈顶指针再加1
    	/*
    		以上两句与此句等价:S.data[S.top++] = x;
    		请注意是S.top++,而不是++S.top
    	*/
    	return true;
    }
    

    4.4 出栈

    //4.出栈操作:栈顶元素出栈(先减再取)-栈顶元素只是逻辑上被删除了,实际上还残留在内存中
    bool Pop(SeqStack& S, ElemType& x) {
    	if (S.top == 0)		//栈空,报错
    		return false;
    	S.top--;				//指针指针先减1
    	x = S.data[S.top];		//栈顶元素再出栈:返回栈顶元素的值x
    	
    	/*
    		以上两句与此句等价:x = S.data[--S.top];
    		请注意是--S.top,而不是S.top--,注意与上面的入栈操作对比
    	*/
    	return true;
    }
    

    4.5 读取栈顶元素

    //5.读取栈顶元素操作
    bool GetTop(SeqStack& S, ElemType& x) {
    	if (S.top == 0)		//栈空,报错
    		return false;
    	x = S.data[--S.top];	
    	S.top++;	//若SeqStack不是引用类型,则此句不用加
    	//以上两句代码建议画图,与初始化指针为-1的顺序栈有所区别
    	return true;
    }
    

    4.6 main函数

    int main() {
    	SeqStack S;		//声明一个顺序栈(分配内存空间)
    
    	/*1、初始化栈*/
    	InitStack(S);
    
    	/*2、判空*/
    	if (StackEmpty(S))
    		printf("当前栈空!\n");
    	else
    		printf("当前栈非空!\n");
    
    	/*3、入栈操作*/
    	ElemType e1;
    	printf("请输入入栈元素的值:");
    	scanf("%d", &e1);
    	if (Push(S, e1))
    		printf("新元素入栈成功!\n");
    	else
    		printf("栈已满,新元素入栈失败!\n");
    
    	/*4、读取栈顶元素*/
    	ElemType e2 = -1;
    	if (GetTop(S, e2))
    		printf("读取栈顶元素成功,当前栈顶元素值为:%d\n", e2);
    	else
    		printf("栈已空,读取栈顶元素失败!\n");
    
    	/*5、出栈操作*/
    	ElemType e3 = -1;
    	if (Pop(S, e3))
    		printf("栈顶元素出栈成功,出栈元素值为:%d\n", e3);
    	else
    		printf("栈已空,栈顶元素出栈失败!\n");
    
    	/*6、读取栈顶元素*/
    	ElemType e4 = -1;
    	if (GetTop(S, e4))
    		printf("读取栈顶元素成功,当前栈顶元素值为:%d\n", e4);
    	else
    		printf("栈已空,读取栈顶元素失败!\n");
    
    	return 0;
    }
    

    5.小结

    1. 栈顶指针为-1和0的区别
      在遇到相关问题时,一定要注意看清初始化栈顶指针的值
      (1)当初始化为-1时,栈顶指针指向的是当前栈中的实际位置,而当初始化为为0时,栈顶指针指向的是下一次要插入的位置。
      (2)在进行入栈和出栈的操作时,二者核心操作是相反的。
      (3)在获取栈顶元素的操作中,如果初始化栈顶为0,那么需要先对指针减1才能取到栈顶元素的值,这点与初始化栈顶为-1时的操作有所不同。并且,如果函数定义中参数使用了引用传递,那么栈顶指针还需要再加1,保持栈顶指针原来的位置。如果使用值传递,则不需要,因为值传递不会改变原来的栈。
    2. 顺序栈的缺点
      顺序栈是由静态数组实现的,和顺序表一样,它也存在着容量不可改变的缺点,如果刚开始申请的内存空间过大,又存在内存浪费的问题。
      如何解决这个问题呢,一种是仍然使用顺序存储,使用共享栈来提高内存空间的利用率;另一种则是使用链式存储,引入链栈,这两种方式将在接下来的文章中继续讨论。
    展开全文
  • ubuntu还原初始状态Wouldn’t it be nice to be able to try a new version of Ubuntu while knowing you can return to the previous version if you don’t like it? We’ll show you a tool that allows you to ...
    ubuntu还原初始状态

    ubuntu还原初始状态

    00_lead_image_timeshift

    Wouldn’t it be nice to be able to try a new version of Ubuntu while knowing you can return to the previous version if you don’t like it? We’ll show you a tool that allows you to take a snapshot of your system at any time.

    能够尝试新版本的Ubuntu,同时又知道如果您不喜欢可以返回以前的版本,这不是很好吗? 我们将向您展示一个工具,该工具可让您随时拍摄系统快照。

    TimeShift is a free tool that is similar to the System Restore feature in Windows. It allows you to initially take a snapshot of your system and then to take incremental snapshots at regular intervals. TimeShift protects only system files and settings, not user files such as documents, pictures, and music. You can use a tool like Back In Time to backup your user files.

    TimeShift是一个免费工具,类似于Windows中的“系统还原”功能。 它使您可以首先对系统进行快照,然后定期进行增量快照。 TimeShift仅保护系统文件和设置,不保护用户文件,例如文档,图片和音乐。 您可以使用“ 时光倒流”之类的工具来备份用户文件。

    NOTE: When we say to type something in this article and there are quotes around the text, DO NOT type the quotes, unless we specify otherwise.

    注意:当我们说要在本文中键入某些内容并且文本周围有引号时,请不要键入引号,除非我们另外指定。

    Recently, we showed you how to back up your applications and PPAs using a tool called Aptik, which is included in the same PPA as TimeShift. First, press Ctrl + Alt + T to open a Terminal window. If you haven’t installed Aptik, type the following two commands (separately) at the prompt, pressing Enter after each command, to add the PPA and update it. For more information, see our article about Aptik. Note: you may have to remove the -y switch to get it to work.

    最近,我们向您展示了如何使用称为Aptik的工具备份应用程序和PPA,该工具与TimeShift包含在同一PPA中。 首先,按Ctrl + Alt + T打开“终端”窗口。 如果尚未安装Aptik,请在提示符下分别键入以下两个命令,在每个命令后按Enter,以添加PPA并更新它。 有关更多信息,请参见我们有关Aptik的文章。 注意:您可能必须删除-y开关才能使其正常工作。

    sudo apt-add-repository -y ppa:teejee2008/ppa
    
    sudo apt-get update
    
    sudo apt-add-repository -y ppa:teejee2008/ppa
    
    sudo apt-get update

    If you have installed Aptik, you are ready to install TimeShift and do not need to enter the previous commands. Type the following text at the prompt and press Enter.

    如果您已经安装了Aptik,则可以安装TimeShift,而无需输入以前的命令。 在提示符下键入以下文本,然后按Enter。

    sudo apt-get install timeshift

    sudo apt-get安装时移

    Type your password when prompted and press Enter.

    出现提示时输入密码,然后按Enter。

    01_command_to_install_timeshift

    Once the installation is finished, close the Terminal window by typing “exit” at the prompt and pressing Enter or by clicking the “X” button in the upper-left corner of the window.

    安装完成后,通过在提示符下键入“ exit”并按Enter或单击窗口左上角的“ X”按钮来关闭“终端”窗口。

    02_closing_terminal

    To open TimeShift, click the “Search” button at the top of the Unity Launcher bar.

    要打开TimeShift,请单击Unity Launcher栏顶部的“搜索”按钮。

    03_opening_search

    Type “timeshift” in the search box. Results of the search display as you type. When the icon for TimeShift displays, click on it to open the application.

    在搜索框中输入“ timeshift”。 输入时显示搜索结果。 当显示TimeShift图标时,单击它以打开应用程序。

    04_starting_timeshift

    A dialog box displays asking for your password. Enter your password in the edit box and click “OK.”

    出现一个对话框,要求您输入密码。 在编辑框中输入密码,然后单击“确定”。

    05_entering_password

    The main TimeShift window displays and the system size is estimated. The “Backup Device” drop-down list allows you to select a different drive or partition to be backed up, if you have more than one.

    此时将显示TimeShift主窗口,并估计系统大小。 如果有多个驱动器或分区,则可以使用“备份设备”下拉列表选择要备份的其他驱动器或分区。

    06_estimating_system_size

    The amount of space needed for the snapshot is listed on the bottom status bar. Snapshots are saved on the selected device so be sure you have enough space to store the snapshot. To back up the selected “Backup Device,” click “Backup” on the toolbar.

    快照所需的空间量在底部状态栏上列出。 快照将保存在所选设备上,因此请确保您有足够的空间来存储快照。 要备份所选的“备份设备”,请在工具栏上单击“备份”。

    07_take_a_manual_on_demand_snapshot

    While the snapshot is being created, a “Synching files…” message displays in the bottom status bar.

    创建快照时,底部状态栏中会显示“正在同步文件...”消息。

    08_synching_files

    When the snapshot is finished, it is listed with the date and time and the name and version of the system. The status bar states how much space is free on the system after the snapshot is taken and states when the last snapshot was taken.

    快照完成后,它将列出日期和时间以及系统的名称和版本。 状态栏说明在拍摄快照后系统上有多少可用空间,并说明何时拍摄最后一个快照。

    09_snapshot_created

    Moving the mouse over the “Backup Device” drop-down list shows you the path where the snapshots are saved on the selected device.

    将鼠标移到“备份设备”下拉列表上,可以显示快照在所选设备上的保存路径。

    10_location_of_snapshots_popup

    The “timeshift” directory contains the various snapshots taken using TimeShift, including scheduled snapshots, which we will discuss later in this article.

    “ timeshift”目录包含使用TimeShift拍摄的各种快照,包括计划的快照,我们将在本文后面讨论。

    11_snapshots_directory

    The “snapshots” folder contains snapshots taken manually. We recommend that you copy the folder for your snapshot to a USB flash drive, network drive, or a cloud service, such as Dropbox or Google Drive, in case it gets corrupted or deleted.

    “ snapshots”文件夹包含手动拍摄的快照。 我们建议您将快照文件夹复制到USB闪存驱动器,网络驱动器或Dropbox或Google Drive等云服务,以防其损坏或删除。

    12_snapshot_folder

    You can see what’s in the snapshot by clicking the “Browse” button.

    您可以通过单击“浏览”按钮查看快照中的内容。

    13_clicking_browse

    The snapshot directory is opened in a Files Manager window and the directories and files from your system (no user files) are listed.

    在“文件管理器”窗口中打开快照目录,并列出系统中的目录和文件(无用户文件)。

    14_contents_of_snapshot_folder

    There are various settings you can customize, such as setting up automatic backups and choosing when older snapshots will be automatically removed. To access the settings, click “Settings” on the toolbar.

    您可以自定义各种设置,例如设置自动备份以及选择何时自动删除旧快照。 要访问设置,请单击工具栏上的“设置”。

    15_clicking_settings

    The “Schedule” tab allows you to specify times when snapshots will be performed. Click or slide the ON/OFF slider button to turn on the “Scheduled Snapshots”. Select the check boxes in the “Enable” column to specify the time interval for the snapshots.

    “时间表”选项卡允许您指定执行快照的时间。 单击或滑动“开/关”滑块按钮以打开“计划的快照”。 选中“启用”列中的复选框以指定快照的时间间隔。

    16_settings_schedule

    The “Auto-Remove” tab allows you to automatically remove older snapshots so you don’t run out of space on your hard drive. There is a “Rule” for each type of snapshot. Enter a “Limit” for each type to tell TimeShift to remove snapshots older than the specified limit, including a limit for when free space is less than a certain amount.

    “自动删除”选项卡使您可以自动删除较旧的快照,从而不会耗尽硬盘驱动器上的空间。 每种类型的快照都有一个“规则”。 为每种类型输入一个“限制”,以告诉TimeShift删除早于指定限制的快照,包括当可用空间小于一定量时的限制。

    17_auto_remove_tab

    The “Advanced” tab allows you to exclude specific files, directories, and directory contents from and include specific files and directories in the snapshots.

    “高级”选项卡允许您从快照中排除特定文件,目录和目录内容,并在快照中包括特定文件和目录。

    When you’ve finished customizing the settings, click “Save.”

    完成自定义设置后,请点击“保存”。

    18_advanced_tab

    When you want to restore a snapshot, open TimeShift, select a snapshot and click “Restore.”

    要还原快照时,请打开TimeShift,选择一个快照,然后单击“还原”。

    NOTE: Depending on the state of your system, you might have to install TimeShift again.

    注意:根据系统状态,您可能必须再次安装TimeShift。

    19_clicking_restore

    The “Target” tab on the “Restore” dialog box allows you to specify the device to which you will restore the selected snapshot. Moving the mouse over the device in the list reveals more information about the device for restoring the snapshot. Select the “Device for Restoring Snapshot” and the “Device for Bootloader Installation.”

    “还原”对话框上的“目标”选项卡允许您指定要将所选快照还原到的设备。 将鼠标移到列表中的设备上会显示有关用于还原快照的设备的更多信息。 选择“用于还原快照的设备”和“用于Bootloader安装的设备”。

    20_selecting_snapshot

    Use the “Exclude” tab to select applications for which you want to keep the current settings and not restore the previous settings.

    使用“排除”选项卡选择要保留其当前设置而不恢复其先前设置的应用程序。

    21_exclude_tab_for_restore

    The “Advanced” tab allows you to exclude specific files, directories, and directory contents from and include specific files and directories in the restored system.

    “高级”选项卡允许您从还原的系统中排除特定的文件,目录和目录内容,并包括特定的文件和目录。

    22_exclude_tab_for_restore

    To close TimeShift, click the “X” button in the upper-left corner of the main window.

    要关闭TimeShift,请单击主窗口左上角的“ X”按钮。

    23_closing_timeshift

    TimeShift is a useful tool if you like experimenting with upgrades to your system or if something goes wrong with your system. Just like System Restore in Windows, you can simply restore your system to a previous working state rather than reinstalling your system.

    如果您喜欢尝试对系统进行升级或系统出了问题,则TimeShift是有用的工具。 就像Windows中的系统还原一样,您可以简单地将系统还原到以前的工作状态,而无需重新安装系统。

    翻译自: https://www.howtogeek.com/206491/how-to-restore-your-ubuntu-linux-system-to-its-previous-state/

    ubuntu还原初始状态

    展开全文
  • git 还原到本地初始状态 与Git一起使用时,鲜为人知的方面之一就是回到原先的位置很容易,也就是说,即使撤消存储库中的重大更改也很容易。 在本文中,我们将快速查看如何重置,还原以及完全返回到以前的状态,所有...

    git 还原到本地初始状态

    与Git一起使用时,鲜为人知的方面之一就是回到原先的位置很容易,也就是说,即使撤消存储库中的重大更改也很容易。 在本文中,我们将快速查看如何重置,还原以及完全返回到以前的状态,所有这些都具有单个Git命令的简单性和优雅性。

    重启

    让我们从Git命令reset 。 实际上,您可以将其视为“回滚”,它会将您的本地环境指向上一次提交。 “本地环境”是指您的本地存储库,暂存区域和工作目录。

    看一下图1。这里我们展示了Git中的一系列提交。 Git中的分支只是一个指向特定提交的命名可移动指针。 在这种情况下,我们的分支主机是指向链中最新提交的指针。

    Local Git environment with repository, staging area, and working directory

    图1:具有存储库,暂存区和工作目录的本地Git环境

    如果我们现在查看master分支中的内容,那么可以看到到目前为止所做的提交链。

    
       
    $ git log --oneline
    b764644 File with three lines
    7c709f0 File with two lines
    9ef9173 File with one line
    reset命令为我们做到这一点。 例如,如果我们想将master重置为指向当前提交两次返回的提交,则可以使用以下方法之一:

    $ git reset 9ef9173 (使用绝对提交SHA1值9ef9173)

    要么

    $ git reset current~2 (在“当前”标签之前使用相对值-2)

    图2显示了此操作的结果。 此后,如果我们在当前分支( master )上执行git log命令,则只会看到一个提交。

    
       
    $ git log --oneline
    9ef9173 File with one line
    After reset

    图2: reset

    git reset命令还包括一些选项,这些选项可以使用最终的提交内容来更新本地环境的其他部分。 这些选项包括: hard重置存储库中指向的提交,使用提交的内容填充工作目录,以及重置登台区域; soft ,仅重置存储库中的指针; 并mixed (默认)以重置指针和临时区域。

    在目标情况下,例如git reset --hard <commit sha1 | reference>使用这些选项可能很有用。 git reset --hard <commit sha1 | reference> . 这将覆盖您尚未提交的所有本地更改。 实际上,它会重置(清除)暂存区域,并使用您重置为提交的内容覆盖工作目录中的内容。 在使用hard选项之前,请确保这是您真正想要做的,因为该命令会覆盖所有未提交的更改。

    还原

    git revert命令的最终效果类似于reset,但其方法不同。 在reset命令将分支指针移回链中(通常)以“撤消”更改的情况下, revert命令在链末尾添加新的提交以“取消”更改。 再次查看图1,最容易看出效果。 如果我们在链中的每个提交中向文件添加一行,则仅返回两行即可返回该版本的一种方法是重置为该提交,即git reset HEAD~1

    结束于两行版本的另一种方法是添加一个删除了第三行的新提交,从而有效地取消了该更改。 这可以通过git revert命令完成,例如:

     $ git revert HEAD 
    

    因为这会添加一个新的提交,所以Git将提示您输入提交消息:

    
       
    Revert "File with three lines"

    This reverts commit b764644bad524b804577684bf74e7bca3117f554.

    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    # Changes to be committed:
    #       modified:   file1.txt
    #

    图3(下图)显示了revert操作完成后的结果。

    如果现在执行git log ,我们将看到一个新的提交,它反映了上一次提交之前的内容。

    
       
    $ git log --oneline
    11b7712 Revert "File with three lines"
    b764644 File with three lines
    7c709f0 File with two lines
    9ef9173 File with one line

    以下是工作目录中文件的当前内容:

    
       
    $ cat <filename>
    Line 1
    Line 2

    还原还是重置?

    您为什么选择通过reset操作进行revert ? 如果您已经将提交链推送到远程存储库(其他人可能已经在其中提交了代码并开始使用它),那么还原是一种取消它们的更改的更好方法。 这是因为Git工作流程非常适合在分支的末尾拾取其他提交,但是当有人重置分支指针时,如果在链中不再看到一组提交,则可能会有挑战。

    当以这种方式使用Git时,这使我们遵循了一条基本规则:在本地存储库中进行此类更改以编写尚未推送的代码就可以了。 但是,如果提交已被推送到远程存储库,并且其他人可能正在使用它们,则请避免进行更改以重写历史记录的更改。

    简而言之,如果您回滚,撤消或重写其他人正在使用的提交链的历史记录,则当您的同事尝试根据他们拉出的原始链合并更改时,他们可能需要做更多的工作。 如果必须对已经推送的代码和他人正在使用的代码进行更改,请在进行更改之前考虑进行交流,并让人们有机会首先合并他们的更改。 然后,他们可以在侵权操作之后提取新副本,而无需合并。

    您可能已经注意到,在进行重置后,原始的提交链仍然存在。 我们移动了指针,并将代码重置为上一次提交,但是它没有删除任何提交。 这意味着,只要我们知道所指向的原始提交,就可以通过简单地重置为分支的原始头来“恢复”到先前的点:

     git reset <sha1 of commit> 
    

    当替换提交时,我们在Git中执行的大多数其他操作中也会发生类似的情况。 创建新的提交,并将适当的指针移至新链。 但是旧的提交链仍然存在。

    变基

    现在,让我们来看一个分支的基础。 考虑我们有两个branches- 主站特征 -附下面的图4中所示的提交的链。 链具有链C4->C2->C1->C0功能链具有C5->C3->C2->C1->C0

    Chain of commits for branches master and feature

    图4:分支母版要素的提交链

    如果我们查看分支中的提交日志,它们可能如下所示。 (使用提交消息的C指示符可以使此操作更容易理解。)

    
       
    $ git log --oneline master
    6a92e7a C4
    259bf36 C2
    f33ae68 C1
    5043e79 C0

    $ git log --oneline feature
    79768b8 C5
    000f9ae C3
    259bf36 C2
    f33ae68 C1
    5043e79 C0

    我告诉人们,在Git中将重新构建视为“与历史的融合”。 本质上,Git所做的是将一个分支中的每个不同提交提交并尝试将差异“重播”到另一个分支上。

    因此,我们可以将要素重新建立到主要素上,以提取C4 (例如,将其插入要素链中)。 使用基本的Git命令,它看起来可能像这样:

    
       
    $ git checkout feature
    $ git rebase master

    First, rewinding head to replay your work on top of it...
    Applying: C3
    Applying: C5

    之后,我们的提交链将如图5所示。

    Chain of commits after the rebase command

    图5: rebase命令后的提交链

    同样,查看提交日志,我们可以看到更改。

    
       
    $ git log --oneline master
    6a92e7a C4
    259bf36 C2
    f33ae68 C1
    5043e79 C0

    $ git log --oneline feature
    c4533a5 C5
    64f2047 C3
    6a92e7a C4
    259bf36 C2
    f33ae68 C1
    5043e79 C0

    请注意,我们有C3'C5' -新提交的‘之上’,在掌握现有链使得从原稿的变化而创建的。 但也请注意,“原始” C3C5仍然存在-它们不再具有指向它们的分支。

    如果我们进行了这种变基,那么就决定我们不喜欢结果并想要撤消它,它就像下面这样简单:

     $ git reset 79768b8 
    

    通过这一简单的更改,我们的分支现在将指向与rebase操作之前相同的提交集-有效地撤消了该提交(图6)。

    After undoing rebase

    图6:撤消rebase操作后

    如果您不记得操作前提交的分支指向什么,该怎么办? 幸运的是,Git再次帮助了我们。 对于大多数以此方式修改指针的操作,Git都会为您记住原始的提交。 实际上,它将其存储在.git存储库目录中名为ORIG_HEAD的特殊引用中。 该路径是一个文件,其中包含修改前的最新参考。 如果我们cat的文件中,我们可以看到它的内容。

    
       
    $ cat .git/ORIG_HEAD
    79768b891f47ce06f13456a7e222536ee47ad2fe

    我们可以像以前一样使用reset命令来指向原始链。 然后日志将显示以下内容:

    
       
    $ git log --oneline feature
    79768b8 C5
    000f9ae C3
    259bf36 C2
    f33ae68 C1
    5043e79 C0

    获取此信息的另一个地方是reflog。 reflog是按播放列表,列出了本地存储库中的开关或对引用的更改。 要查看它,可以使用git reflog命令:

    
       
    $ git reflog
    79768b8 HEAD@{0}: reset: moving to 79768b
    c4533a5 HEAD@{1}: rebase finished: returning to refs/heads/feature
    c4533a5 HEAD@{2}: rebase: C5
    64f2047 HEAD@{3}: rebase: C3
    6a92e7a HEAD@{4}: rebase: checkout master
    79768b8 HEAD@{5}: checkout: moving from feature to feature
    79768b8 HEAD@{6}: commit: C5
    000f9ae HEAD@{7}: checkout: moving from master to feature
    6a92e7a HEAD@{8}: commit: C4
    259bf36 HEAD@{9}: checkout: moving from feature to master
    000f9ae HEAD@{10}: commit: C3
    259bf36 HEAD@{11}: checkout: moving from master to feature
    259bf36 HEAD@{12}: commit: C2
    f33ae68 HEAD@{13}: commit: C1
    5043e79 HEAD@{14}: commit (initial): C0

    然后,您可以使用在日志中看到的特殊相对命名格式,重置为该列表中的任何项目:

     $ git reset HEAD@{1} 
    

    一旦您了解到Git会在操作“修改”链时保持原始的提交链,那么在Git中进行更改的恐惧就会大大减少。 这是Git的核心优势之一:能够快速轻松地尝试并在不起作用的情况下撤消它们。


    Brent Laster将于7月16日至19日在俄勒冈州波特兰举行的第20届年度OSCON活动中展示Power Git:Rerere,Bisect,子树,Filter分支,工作树,子模块等 。有关在任何级别使用Git的更多提示和解释,结帐Brent的书“ Professional Git ”,可在亚马逊上找到。

    翻译自: https://opensource.com/article/18/6/git-reset-revert-rebase-commands

    git 还原到本地初始状态

    展开全文
  • 关于栈顶指针初值为-1和0的区别

    千次阅读 多人点赞 2021-02-25 13:36:16
    当栈顶指针的初始值设置 S.top=-1时 ps: 当栈为空时,栈顶指针指向data[-1],但栈底是data[0] top data{4} data{3} data{2} data{1} data{0} data{-1} … 进栈操作:栈不满时,栈顶指针先+1...

    关于栈顶指针初值为-1或者0 的区别(c语言)

    栈顶指针:S.top
    栈顶元素:S.data[S.top]

    当栈顶指针的初始值设置 S.top=-1时

    ps:
    当栈为空时,栈顶指针指向data[-1],但栈底是data[0]

    top
    data{4}
    data{3}
    data{2}
    data{1}
    data{0}
    data{-1}

    进栈操作:栈不满时,栈顶指针先+1,在送值到栈顶元素

    (通俗来讲:先给客人指路,客人才知道自己的座位在哪)

    S.top=S.top+1;
    S.data[S.top]=x;
    

    或者:

    S.data[++S.top]=x;
    

    出栈操作:栈非空时,先取栈顶元素值,再将栈顶指针-1

    S.data[S.top]=x;
    S.top=S.top-1;
    

    或者:

    x=S.data[S.top--];
    

    栈空条件:S.top==-1;
    栈满条件:S.top==MaxSize-1;
    栈长:S.top+1.

    当栈顶指针的初始值设置 S.top=0时

    ps:
    当栈为空时,栈顶指针指向栈底data[0]

    进栈操作:栈不满时,先送值到栈顶元素,栈顶指针再+1

    通俗来讲:客人一进门,就看见有服务生(栈顶指针)在叫自己过去坐,当这位客人落座后,服务生将会去下一个座位旁继续等待客人。

    S.data[S.top]=x;
    S.top=S.top+1;
    

    或者:

    S.data[S.top++]=x;
    

    出栈操作:栈非空时,先将栈顶指针-1,再取栈顶元素值(倘若先取值,再将栈顶指针-1,则会出错)

    S.top=S.top-1;
    x=S.data[S.top];
    

    或者:

    x=S.data[--S.top];
    

    栈空条件:S.top==0;

    栈满条件:S.top==MaxSize;
    栈长:S.top.

    初来乍到,请各位大佬多多关照,如有错误,欢迎指正!(淦!第一篇耗时一个小时呜呜呜~)

    展开全文
  • 顺序栈-初始化栈顶指针为-11.头文件及类型定义2.顺序栈类型定义3.函数声明4.基本操作4.1 初始化顺序栈4.2 判空4.3 入栈4.4 出栈4.5 读取栈顶元素4.6 main函数5.小结 1.头文件及类型定义 #include<stdio.h> #...
  • 前言:WifiController和WifiStateMachine中都用到了状态模式,据《Head First设计模式》所讲状态模式就是封装基于状态的行为,并将行为委托到当前状态。PS:如果条件允许的话,可以先学习下《Head First设计模式》的...
  • top = '0px' ; document . body . appendChild ( stats . domElement ) ; return stats ; } function update ( ) { stats . update ( ) ; controls . update ( ) ; } function ...
  • WebGIS中地图恢复初始位置及状态

    千次阅读 2017-02-09 18:07:13
    我想实现这么一个效果:地图任意缩放后,点击一个按钮,将立刻回到地图初始加载时的位置,并且是没有缩放的状态。怎么办呢?最好的办法就是用Home按钮。<!DOCTYPE HTML> , maximum-scale=1,user-sc
  • el-switch使用过程中,通过触发开关按钮,数据更改成功,但是按钮一直是默认的一种状态,因此需要数据和开关状态同时改变,所以每次操作对应的信息时要初始化按钮开光状态。 以下是效果图 此处是一个el-dialog真的...
  • D3D12渲染技术之初始化流程

    千次阅读 2018-08-23 14:12:47
    也就是我们通常说的初始化D3D12,D3D12的初始化工作与以前的D3D9是完全不一样的,D3D12做了大幅的升级。但是每个D3D图形API都有自己的初始化流程,大家只要记住这个流程,学习起来就比较容易,就跟生产车架的流水线...
  • 学习FreeRTOS(2):初始化阶段的中断状态 分析FreeRTOS的Cortex-M4F移植版(portable/GCC/ARM_CM4F)在初始化阶段CPU中断状态的变化。复位后中断默认处于开启状态,当创建第一个任务时中断被关闭,开启调度器时...
  • 参数:row, selected 如下,先遍历每行数据对其该属性值做判断,然后更新选中状态 //可关联状态的商品默认全选 //created() this.$nextTick(() => { for (let i = 0; i ; i++) { if (this.tableData[i]....
  • echarts图表初始化和常用属性

    千次阅读 2019-03-09 21:42:29
    1.echarts图表初始化和设置相关属性 // 基于准备好的dom,初始化echarts图表 var myChart = ec.init(document.getElementById('chart')); // 图表相关属性设置 var option = { tooltip: { show: true }, ...
  • 几个有关栈的题目

    千次阅读 多人点赞 2021-01-25 20:37:04
    设栈的顺序存储空间为S(1:50),初始状态top=-1。现经过一系列正常的入栈与退栈操作后,top=30,则当前栈中的元素个数为( D )。 A.20 B.19 C.31 D.30 设栈的顺序存储空间为S(1:m),初始状态top=m+1,则...
  • 串口通信初始

    千次阅读 2019-10-29 10:37:18
    转载地址:... linux下串口通信主要有下面几个步骤 串口通信流程图 下面我会一一介绍这几个步骤。 ...代码(串口为ttyUSB0) [java] view plain copy //打开串口 intopen_port(void) { ...
  • OpenLayers3(一)初始化地图

    千次阅读 2018-09-12 10:38:07
    惯例:OpenLayer API 引入文件 &amp;amp;amp;amp;lt;style&amp;amp;amp;amp;... margin:0; padding:0; } .ol-zoom{ top:80px; } .ol-zoom-extent{ top:140px; } .o
  • button初始

    千次阅读 2016-07-04 14:09:25
    top . equalTo (_self. passWorkTF . mas_bottom ). with . offset ( 25 );  make. height . mas_equalTo ( @35 );  make. width . mas_equalTo (_self. registerBtn . mas_width );  }]; ...
  • checkbox的使用(初始化、赋值、取值) jsp checkbox是通过name属性进行...label for="ledSubtitle" class="col-xs-1 control-label" style="padding-top: 7px;margin-left: 0%;">LED字幕</label> <di...
  • div滚动条回到初始位置

    千次阅读 2019-09-18 17:45:42
    var box= $('div'), divp= $('divp'); box.scrollTop( divp.offset().top - box.offset().top + box.scrollTop() ); box.animate({ scrollTop: ...
  • QTableWidget初始化及数据插入

    千次阅读 2020-04-27 18:09:48
    Qt项目中经常用到表格,在项目中使用统一封装的接口,进行表格的初始化和数据插入; //初始化所有TableWidget,参数headerList为表头数据,使用逗号分隔的表头数据字符串 void initTableWidget(QTableWidget *...
  • Hadoop2.6.0中YARN底层状态机实现分析

    万次阅读 2016-04-29 08:30:19
    Hadoop2.x.x版本的底层实现中作了很多优化:用状态机对各种对象生命周期和状态转移进行管理;采用事件机制避免线程同步与阻塞;采用Protocol Buffers优化RPC性能;采用Apache Avro优化日志等。本文主要针对YARN中...
  • //置S为空栈,S.top0即表示栈为空栈   S.size = size;  //栈的空间初始容量值   S.increment = inc;  //栈的空间初始增量值(如果需要扩容)   return   OK; //上面的执行正常,返回...
  • 利用缓存来存,读取动态改变后的X,YsetX()和setY()来设置初始位置。效果代码:import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import ...
  • //框架窗口设置初始停靠的位置 return CFrameWnd::OnCreate(lpc); } //工具栏风格: TBSTYLE_FLAT:平滑风格 CBRS_GRIPPER:有推动把手 CBRS_SIZE_DYNAMIC:动态改变形状 CBRS_TOOLTIPS:能提示文字 ...
  • 在Java多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销。双 重检查锁定是常见的延迟初始化技术,但它是一个错误的用法。本文将分析双重检查锁定的 错误根源,以及两种线程安全的延迟初始化...
  • 在Java多线程中,有时候可能需要采用延迟初始化来降低初始化类和创建对象的开销。双重检查锁(饿汉式单例中经常用)是常见的延迟初始化方案,但它是一个错误的用法。本文将分析双重检查锁定的错误根源,以及两张线程...
  • 一、进程定义: 进程也就是cpu未完成的工作。...二、ps命令psa 关于当前shell运行的所有进程x | -A 所有进程,x显示状态-A不会。这是两个命令f 显示进程从属关系e 显示进程调用环境工具的详细信息l ...
  • 交通灯状态机verilog

    千次阅读 2020-05-15 15:20:59
    交通灯状态机设计-verilog
  • 日常开发中我们经常会因为绘图、绘制自定义组件、定位组件或者是计算布局高度需要减去状态栏高度等需要来获取Activity界面中状态栏、标题栏的高度。但很多人马上要拿起来就用还是会遇到各种各样的问题,一时要查很多...
  • 定义栈 /** * className:Statck * * @author:zjl * @version:0.1 * @date:2020/7/1512:22 ... private int top;//栈顶指针(始终指向栈顶的节点) private Object[] stack; public Statck(int max

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,886
精华内容 58,354
关键字:

初始状态top等于0