文档库 最新最全的文档下载
当前位置:文档库 › 数据结构串的基本操作

数据结构串的基本操作

数据结构串的基本操作
数据结构串的基本操作

串的生成(StrAssign)、串的比较(StrCompare)、串的联接(StrCombine)、求串的长度(StrLength)和求串的子串(StrSub)这5个操作构成的集合为OperationSet中的最小操作子集。

#include

#include

#define MaxSize 100

typedef struct

{

char data[MaxSize];

int len;

}SqString;

void StrAssign(SqString &str,char cstr[])

{

int i;

for (i=0;cstr[i]!='\0';i++)

str.data[i]=cstr[i];

str.len=i;

}

SqString StrCombine(SqString s,SqString t)

{

SqString str;

int i;

str.len=s.len+t.len;

for (i=0;i

str.data[i]=s.data[i];

for (i=0;i

str.data[s.len+i]=t.data[i];

return str;

}

SqString SubStr(SqString s,int i,int j)

{

SqString str;

int k;

str.len=0;

if(i<=0 || i>s.len || j<0 || i+j-1>s.len)

{

printf("参数不正确\n");

return str;

}

for(k=i-1;k

str.data[k-i+1]=s.data[k];

str.len=j;

return str;

}

int StrCompare(SqString s,SqString t)

{

int same=1,i;

if (s.len!=t.len)

same=0;

else

for (i=0;i

if (s.data[i]!=t.data[i])

{

same=0;

break;

}

return same;

}

SqString RepStr(SqString s,int i,int j,SqString t) {

int k;

SqString str;

str.len=0;

if (i<=0 || i>s.len || i+j-1>s.len)

{

printf("参数不正确\n");

return str;

}

for (k=0;k

str.data[k]=s.data[k];

for (k=0;k

str.data[i+k-1]=t.data[k];

for (k=i+j-1;k

str.data[t.len+k-j]=s.data[k];

str.len=s.len-j+t.len;

return str;

}

int StrLength(SqString s)

{

return s.len;

}

void ShowS(SqString s)

{

int i;

if (s.len>0)

{

for (i=0;i

printf("%c",s.data[i]);

printf("\n");

}

}

int main()

{

SqString s,s1,s2,s3,s4,s5;

printf("--------------开始字符串的操作-------------\n");

printf("建立串S和S1\n");

StrAssign(s,"makesuccess");

StrAssign(s1,"you");

printf("输出串S\n");

ShowS(s);

printf("输出串S1\n");

ShowS(s1);

printf("输出串S的长度\n");

printf("%d\n",StrLength(s));

printf("输出串S1的长度\n");

printf("%d\n",StrLength(s1));

printf("提取串S的第2个字符开始的3个字符而生成串S2\n");

s2 = SubStr(s,2,3);

printf("输出串S2\n");

ShowS(s2);

printf("将串S1和S2连接起来而生成串S3\n");

s3 = StrCombine(s1,s2);

printf("输出串S3\n");

ShowS(s3);

printf("将串S的第4个字符开始的3个字符替换成串S1而生成串S4\n");

s4 = RepStr(s,4,3,s1);

printf("输出串S4\n");

ShowS(s4);

printf("串S4的长度\n");

printf("%d\n",StrLength(s4));

printf("提取串S4的第5个字符开始的4个字符而生成串S5\n");

s5 = SubStr(s4,5,4);

printf("输出串S5\n");

ShowS(s5);

printf("---------------字符串的操作完成-------------\n");

return 0;

}

C语言数据结构串的基本操作

实验九串的基本操作 #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars 的长度i if(!i) { // chars的长度为0 (*T).ch = NULL; (*T).length = 0; } else { // chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char)); // 分配串空间 if(!(*T).ch) // 分配串空间失败 exit(0); for(j = 0; j < i; j++) // 拷贝串 (*T).ch[j] = chars[j]; (*T).length = i; } return 1; } // 由串S复制得串T int StrCopy(HString *T,HString S) { int i; if((*T).ch) free((*T).ch); // 释放T原有空间 (*T).ch=(char*)malloc(S.lengt h*sizeof(char)); // 分配串空间if(!(*T).ch) // 分配串空间失 败 exit(0); for(i=0;i

数据结构实验二_栈的基本操作

青岛理工大学课程实验报告

s->top=s->base; s->stacksize=stack_init_size; return 1; } int Push(sqstack *s,int e) { if(s->top-s->base>=s->stacksize) { s->base=(int *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(int)); if(!s->base) return 0; s->top=s->base+s->stacksize; s->stacksize+=stackincrement; } *(s->top++)=e; return e; } int Pop(sqstack *s,int e) { if(s->top==s->base) return 0; e=*--s->top; return e; } int stackempty(sqstack *s) { if(s->top==s->base) { return 1; } else Push(s,n%flag); n=n/flag; } while(!stackempty(s)) { e=Pop(s,e); switch(e) { case 10: printf("A"); break; case 11: printf("B"); break; case 12: printf("C"); break; case 13: printf("D"); break; case 14: printf("E"); break; case 15: printf("F"); break; default: printf("%d",e); } } printf("\n"); return 0; } int main() { sqstack s; StackInit(&s); conversion(&s); return 0; }

数据结构大作业含源代码

数据结构大作业 作业题目:职工信息管理系统 姓名: 学号: 班级: 指导教师: 日期:

一、主要功能: 这个职工信息管理系统是由C语言编写的程序,它用起来很方便又很灵活。它由输入职工信息,输出职工信息,按职工号,部门号,工资排序,按职工号,部门号,工资来输出职工的所有信息。删除有关职工的所有信息,保存职工的所有信息并退出等11个模块儿组成。 二、实验环境:C语言、C++、C# 等等。 三、功能说明: 下面按步骤来介绍一下,职工信息管理系统的基本操作。 这是运行程序以后出现的主界面。如图(1)所示: 图(1)主界面 1.输入职工的信息 该模块儿的功能是分别输入职工的姓名,职工号,部门号,工资等信息。每次输入职工的所有信息以后,界面上会显示出《输入完成!》的命令。如图(2)所示:

图(2)输入职工信息 2.输出所有的职工信息 该模块儿的功能是显示出有关职工的所有信息。操作如图(3)所示: 图(3)输出所有的职工信息 3.按职工号排序 该模块儿的功能是按职工号排序所有的职工。我们按3的时候,界面上会显示出《排序完成!》的命令。如图(4)所示:

图(4)按职工号排序 4.输出所有的职工号码 该模块儿的功能是显示出已排序好的所有职工的号码。操作如图(5)所示: 图(5)输出所有的职工号 5.按部门号排序 该模块儿的功能是按部门号排序所有职工的部门号。我们按5的时候,界面上会显示出《排序完成!》的命令。如图(6)所示:

图(6)按部门号排序 6.输出所有的部门号 该模块儿的功能是显示出已排序好的所有部门号。操作如图(7)所示: 图(7)输出所有的部门号 7.按职工的工资排序 该模块儿的功能是按工资排序所有职工的工资。我们按7的时候,界面上会显示出《排序完成!》的命令。如图(8)所示:

数据结构中栈的介绍

数据结构中栈的介绍 1.栈的概念 栈(Stack)是一种特殊的表,这种表只在表的一端进行插入和删除操作。允许插入和删除数据元素的这一端称为栈顶;而另一固定的一端称为栈底。不含任何元素的栈称为空栈。 栈的修改是按后进先出的原则进行的。栈又称为后进先出(Last In First Out)表,简称为LIFO表。 如图1所示:假设一个栈S中的元素为a n,a n-1,..,a1,则称a1为栈底元素,a n为栈顶元素。 图1 图 2 2.栈的存储与操作 由于栈是一个特殊的表,可以用一维数组来实现栈。同时设立指针t(称为栈顶指针)来指示栈顶元素的当前位置。 我们用一个数组s[1..m]来表示一个栈时,将栈底固定在数组的底部,即s[1]为最早入栈的元素,并让栈向数组上方(下标增大的方向)扩展。当t=0时,表示这个栈为一个空栈。当t=m时,表示这个栈已满。 可以用下列方式定义栈: const m=栈表目数的上限; type stack=array[1..m] of stype; {栈的数据类型} var s:stack; t:integer; {栈顶指针} 进栈、出栈操作的过程和函数(假设栈元素的数据类型为整型): (1)进栈过程(push) ①若t≥m时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②); ②置t=t+1(栈指针加1,指向进栈地址); ③S(t)=x,结束(x为新进栈的元素); procedure push(var s:stack; x:integer;var t:integer); begin if t=m then writeln('overflow') else begin

顺序栈的基本操作讲解

遼穿紳範大學上机实验报告 学院:计算机与信息技术学院 专 业 : 计算机科学与技术(师 范) 课程名称:数据结构 实验题目:顺序栈的基本操作 班级序号:师范1班 学号:201421012731 学生姓名:邓雪 指导教师:杨红颖 完成时间:2015年12月25号 一、实验目的: 1 ?熟悉掌握栈的定义、结构及性质; 2. 能够实现创建一个顺序栈,熟练实现入栈、出栈等栈的基本操作; 3?了解和掌握栈的应用。 二、实验环境: Microsoft Visual C++ 6.0

三、实验内容及要求: 栈是一种特殊的线性表,逻辑结构和线性表相同,只是其运算规则有更多的限制,故又称为受限的线性表。 建立顺序栈,实现如下功能: 1. 建立一个顺序栈 2. 输出栈 3. 进栈 4. 退栈 5. 取栈顶元素 6. 清空栈 7. 判断栈是否为空 进行栈的基本操作时要注意栈”后进先出”的特性。 四、概要设计: 1、通过循环,由键盘输入一串数据。创建并初始化一个顺序栈。 2、编写实现相关功能函数,完成子函数模块如下。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作

五、代码: #include #include #define maxsize 64 typedef int datatype; //定义结构体typedef struct { datatype data[maxsize]; int top; }seqstack; //建立顺序栈seqstack *SET(seqstack *s) { int i; s=(seqstack*)malloc(sizeof(seqstack)); s->top=-1; printf(" 请输入顺序栈元素(整型,以scanf("%d",&i); do{ s->top++; s->data[s->top]=i; scanf("%d",&i); 0 结束):"); }while(i!=0); printf(" 顺序栈建立成功\n"); return s; } //清空栈void SETNULL(seqstack *s) { s->top=-1;} //判断栈空 int EMPTY(seqstack *s) { if(s->top>=0) return 0; else return 1;} //进栈 seqstack *PUSH(seqstack *s) { int x; printf(" 你想要插入的数字:"); scanf("%d",&x); if(s->top==maxsize-1) { printf("overflow"); return NULL; } else {

数据结构——二叉树基本操作源代码

数据结构二叉树基本操作 (1). // 对二叉树的基本操作的类模板封装 //------------------------------------------------------------------------------------------------------------------------ #include using namespace std; //------------------------------------------------------------------------------------------------------------------------ //定义二叉树的结点类型BTNode,其中包含数据域、左孩子,右孩子结点。template struct BTNode { T data ; //数据域 BTNode* lchild; //指向左子树的指针 BTNode* rchild; //指向右子树的指针 }; //------------------------------------------------------------------------------------------------------------------------ //CBinary的类模板 template class BinaryTree { BTNode* BT; public: BinaryTree(){BT=NULL;} // 构造函数,将根结点置空 ~BinaryTree(){clear(BT);} // 调用Clear()函数将二叉树销毁 void ClearBiTree(){clear(BT);BT=NULL;}; // 销毁一棵二叉树 void CreateBiTree(T end); // 创建一棵二叉树,end为空指针域标志 bool IsEmpty(); // 判断二叉树是否为空 int BiTreeDepth(); // 计算二叉树的深度 bool RootValue(T &e); // 若二叉树不为空用e返回根结点的值,函数返回true,否则函数返回false BTNode*GetRoot(); // 二叉树不为空获取根结点指针,否则返回NULL bool Assign(T e,T value); // 找到二叉树中值为e的结点,并将其值修改为value。

数据结构栈的定义及基本操作介绍

北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 班级软件工程3班学号 150202102309姓名郭荣栋 指导教师余俊杰成绩 实验题目栈的实现与应用实验时间 一、实验目的、意义 (1)理解栈的特点,掌握栈的定义和基本操作。 (2)掌握进栈、出栈、清空栈运算的实现方法。 (3)熟练掌握顺序栈的操作及应用。 二、实验内容及要求 1.定义顺序栈,完成栈的基本操作:建空栈、入栈、出栈、取栈顶元素(参见教材45页)。 2. 调用栈的基本操作,将输入的十进制数转换成十六进制数。 3. 调用栈的基本操作,实现表达式求值,如输入3*(7-2)#,得到结果15。 三、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)

四、程序清单(包含注释) 1、2. #include #include #include using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 #define INCREASEMENT 10 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10

typedef int SElemType; typedef int Status; typedef struct{ SElemType *base; SElemType *top; int stacksize; }Sqstack; void StackTraverse(Sqstack S) { while (S.top != S.base) { cout << *(S.top-1) << endl; S.top--; } } Status InitStack(Sqstack &S){ S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base){ exit(OVERFLOW); }

数据结构串基本操作代码

实验三串 //串的基本操作 #include "stdio.h" #include "stdlib.h" #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; void strlength(SString S)//求字串并放到 S[0] 中 { int m; for(m=1;S[m]!='\0';m++); S[0]=m-1; } void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{ strlength(S); int i; for(i=S[0];i>=n;i--) S[i+1]=S[i]; S[n]=a; S[S[0]+2]='\0'; } int compare(SString S,SString T) { strlength(S); strlength(T); int i; for(i=1;i<=S[0]&&i<=T[0];i++) { if(S[i]>T[i]) return 1; if(S[i]T[0]) return 1;

else if(S[0]S[0]||len<0||len>S[0]-pos+1) { printf("Error!position or length is out of range\n"); return 0; } for(i=1;i<=len;i++)

数据结构栈的基本操作,进栈,出栈

第五次实验报告—— 顺序栈、链栈的插入和删除一需求分析 1、在演示程序中,出现的元素以数字出现定义为int型, 2、演示程序在计算机终端上,用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在终端上 3、顺序栈的程序执行的命令包括如下: (1)定义结构体 (2)顺序栈的初始化及创建 (3)元素的插入 (4)元素的删除 (5)顺序栈的打印结果 3、链栈的程序执行的命令包括如下: (1)定义结构体 (2)链栈的初始化及创建 (3)元素的插入 (4)元素的删除 (5)链栈的打印结果 二概要设计 1、顺序栈可能需要用到有序表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemL, i=1,2,...,n, n≥0} 数据关系:R1={|ai-1,ai ∈D, i=2,...,n } 基本操作: InitStack(SqStack &S) 操作结果:构造一个空栈 Push(L,e) 操作结果:插入元素e为新的栈顶元素

Status Pop(SqStack &S) 操作结果:删除栈顶元素 }ADT List; 2、链栈可能需要用到有序表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemL, i=1,2,...,n, n≥0} 数据关系:R1={|ai-1,ai ∈D, i=2,...,n } 基本操作: LinkStack(SqStack &S) 操作结果:构造一个空栈 Status Push(L,e) 操作结果:插入元素e为新的栈顶元素 Status Pop(SqStack &S) 操作结果:删除栈顶元素 }ADT List; 3、顺序栈程序包含的主要模块: (1) 已给定的函数库: (2)顺序栈结构体: (3)顺序栈初始化及创建: (4)元素插入 (5)元素删除

数据结构C语言版第四章 串

第四章串 重点难点 理解"串"类型定义中各基本操作的特点,并能正确利用它们进行串的其它操作;掌握串类型的各种存储表示方法;理解串的两种匹配算法。 典型例题 1、简述下列每对术语的区别: 空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;【解】 (1)空串是指不包含任何字符的串,它的长度为零。 空白串是指包含一个或多个空格的串,空格也是字符。 (2)串常量是指在程序中只可引用但不可改变其值的串。 串变量是可以在运行中改变其值的。 (3)主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。 (4)静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。 动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。 2、以HString为存储表示,写一个求子串的算法。 【解】HString 是指以动态分配顺序串为存储表示,其定义为: typedef struct { char *ch; int length; }HString; void *substr( HString *sub,HString *s,int pos,int len) {//用sub返回串s的第pos个字符起长度为len的子串。sub初始时为一空串 //pos的合法位置为0<=pos<=s->length-1 int i; if (pos<0||pos>s->length-1||len<=0) Error("parameter error!");//参数不合法,子串为空串 if (s->lengthlen=s->length-pos;//设置子串的串长 else sub->length=len; //设置子串的串长 sub->ch=(char *)malloc(len*sizeof(char));//为sub->ch申请结点空间 for(i=0;ilength;i++)//将s串中pos位置开始的共sub->length个字符复制到sub串中

数据结构串的操作实验报告

实验报告 课程数据结构实验名称实验三串 学号姓名实验日期: 串的操作 实验目的: 1. 熟悉串类型的实现方法,了解简单文字处理的设计方法; 2. 熟悉C语言的字符和把字符串处理的原理和方法; 3. 熟悉并掌握模式匹配算法。 实验原理: 顺序存储结构下的关于字符串操作的基本算法。 模式匹配算法BF、KMP 实验内容: 4-19. 在4.4.3节例4-6的基础上,编写比较Brute-Force算法和KMP算法比较次数的程序。 4-20. 设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V),即要求在主串S中,从位置start开始查找是否存在字串T。若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0;并要求设计主函数进行测试。一个测试例子为:S=“I am a student”,T=“student”,V=“teacher”。程序代码: 4-19的代码: /*静态存储结构*/ typedef struct { char str[MaxSize]; int length; }String; /*初始化操作*/ void Initiate(String *S) { S->length=0; } /*插入子串操作*/ int Insert(String *S, int pos, String T) /*在串S的pos位置插入子串T*/ { int i; if(pos<0||pos>S->length) { printf("The parameter pos is error!\n"); return 0; } else if(S->length+T.length>MaxSize)

数据结构——顺序栈的基本操作

#include using namespace std; # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 typedef struct { int * base; int * top; int stacksize;//当前栈可使用的最大容量 } SqStack; void InitStack(SqStack &S)//构造一个空栈 { S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!S.base) {cout<<"存储分配失败!!!"<=S.stacksize) { S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(!S.base) cout<<"存储分配失败!!!"<

(完整word版)顺序栈基本操作实验报告

数据结构实验三 课程数据结构实验名称顺序栈基本操作第页 专业班级学号 姓名 实验日期:年月日评分 一、实验目的 1.熟悉并能实现栈的定义和基本操作。 2.了解和掌握栈的应用。 二、实验要求 1.进行栈的基本操作时要注意栈"后进先出"的特性。 2.编写完整程序完成下面的实验内容并上机运行。 3.整理并上交实验报告。 三、实验内容 1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。 2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。 主要功能描述如下: (1)从键盘上输入表达式。 (2)分析该表达式是否合法: ?a) 是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。 ?b) 是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。 ?c) 若是其它字符,则返回错误信息。 (3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。 程序中应主要包含下面几个功能函数: ?l void initstack():初始化堆栈 ?l int Make_str():语法检查并计算

?l int push_operate(int operate):将操作码压入堆栈 ?l int push_num(double num):将操作数压入堆栈 ?l int procede(int operate):处理操作码 ?l int change_opnd(int operate):将字符型操作码转换成优先级 ?l int push_opnd(int operate):将操作码压入堆栈 ?l int pop_opnd():将操作码弹出堆栈 ?l int caculate(int cur_opnd):简单计算+,-,*,/ ?l double pop_num():弹出操作数 四、实验步骤 (描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果) 第一题: #include using namespace std; #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 #define OVERFLOW -1 #define OK 1 #define NO -1 #define NULL 0 typedef int Status; typedef char SElemType; typedef struct { SElemType *base; //在栈构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 } SqStack; Status Initstack(SqStack &S)//构造一个空栈S { S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize= STACK_INIT_SIZE; return OK; }//InitStack Status StackEmpty(SqStack &S) { if(S.base==S.top)

数据结构-串的查找与替换不会源程序

数据结构课程设计 ———串的查找与替换、

目录 (一)设计思路 (1) (二)问题描述 (1) (三)内容要求 (1) (四)设计目的 (1) (五)设计实现 (5) (六)设计调试 (10) (七)设计总结 (15) (八)参考文献 (15)

(一)设计目的 数据结构课程设计的目的是:通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。 (二)问题描述: 打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。 (三)内容要求: 1.根据题目要求进行需求分析,分析出该项任务的主要功能和设计重点。 2.根据需求分析的内容划分模块 3.进行程序设计 (四)设计思路 计算机上的非数值处理的对象基本上上字符串数据,字符串一般简称为串。串(string)是由零个或多个字符组成的有限序列,一般记为s=`a1a2…an`(n 大于零)。通常称字符在序列中的序号为该字符在串中的位置,子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。当两个串的每个字符都相等时(串值相等),称这两个串是相等的。 在子串的查找定位过程中,分别利用计数指针j和k指示被替换串和替换串中当前正待比较的字符位置。所用算法的基本思想是:首先利用指针i来完成被替换串和替换串在文本中的遍历,从被替换串和替换串的第一个字符起进行比较,若相等则继续逐个比较后续字符;否则完成一次比较,指针i递增进行下一次的比较。以此类推,直至匹配成功。 现根据问题描述作如下分析: 首先利用标准库函数fopen()打开一个文件,然后从文件中读取字符串保

数据结构创始人介绍

https://www.wendangku.net/doc/e69337801.html,/homepage/KnuthRes ume.htm 1938年12月7日,Donald E. Knuth 出生 于美国威斯康星州密尔沃基市。其父是个中学教 师,经常在星期天到教堂演奏管风琴,小Knuth 耳濡目染,日后也成为教师,业余爱好也是弹管风 琴。 ☆1956年进入俄亥俄州克利夫兰的凯斯理工学院(现并入凯斯西储大学),学习物理。 1957年大学一年级暑假在学校打工,接触到当时很先进的IBM650 计算机,对其产生浓厚的兴趣。 ☆1958年改学数学,并从此与计算机结缘。 ☆1960年毕业,因为成绩过于出色,校方打破惯例,Knuth 被同时授予学士和硕士学位。随后进入加州理工学院数学系。 1960-1968年,兼任Burroughs 公司顾问。 1961年结婚,夫人小他一岁。现有一儿一女。 1963年取得博士学位,并留校任助理教授。 1964-1967年,兼任美国计算机协会刊物《程 序设计语言》编辑。 1966年升为副教授。 ☆1968年(30岁)任教于斯坦福大学计算机科学系,正教授。同年,开始撰写著名的《计算机程序设计艺术》一书。

☆1968年《计算机程序设计艺术》第一卷《基本算法》出版。 ☆1969年,第二卷《半数字化算法》出版。 1971年获首届美国计算机协会格蕾丝·赫柏奖。 ☆1973年,第三卷《排序与搜索》出版。同年还出版了第一卷的第二版。有人曾说,看了这部书后,再谈起编程序都会变得谦虚谨慎。比尔·盖茨曾说:“如果你能读懂整套书的话,请给我发一份你的简历。”同年,当选为美国科学艺术学院院士。截至到1973年的第一卷第二版,采用都是的活字排版印刷,这需要经验丰富的活字排版工人。 ☆1974年(36岁),因在算法分析和编程语言设计方面的突出贡献,荣获美国计算机协会图灵奖,是历史上最年轻的获奖者。图灵奖被称为计算机界的诺贝尔奖。《计算机程序设计艺术》一书与牛顿的《自然哲学的数学原理》等书一起,被评为“世界历史上最伟大的十种科学著作”之一。 1975年当选为美国国家科学院院士。 ☆1976年出版第二卷第二版时采用了计算机排版技术。但是,当时的计算机排版与活字排版效果相差甚远,而且前后两卷的字体、版式和文本格式等都不一致。非常失望的Knuth 暂停了第二卷第二版的出版,决心自己设计一个比活字排版更加优美和适用的排版软件,这就是后来的TeX 。 1977年5月开始构造后来被称为 TeX 的文字处理系统,他研究了古今的排版技术,把其中最优越的部分引入TeX 中,连TeX 中

数据结构(C语言)栈的基本操作

实验名称栈的基本操作 实验目的 掌握栈这种抽象数据类型的特点及实现方法。 实验内容 从键盘读入若干个整数,建一个顺序栈或链式栈,并完成下列操作: (1)初始化栈; (2)判栈为空; (3)出栈; (4)入栈。 算法设计分析 (一)数据结构的定义 struct stackNode{ int data; struct stackNode *nextPtr; }; typedef struct stackNode listStact; typedef listStact *stackNodePtr; (二)总体设计 程序由主函数、入栈函数,出栈函数,删除函数判官是否为空函数和菜单函数组成。 (1)主函数:调用各个函数以实现相应功能

(三)各函数的详细设计: Function1: void instruct() //菜单 (1):使用菜单显示要进行的函数功能; Function2:void printStack(stackNodePtr sPtr) //输出栈 (1):利用if判断栈是否为空; (2):在else内套用while(头指针不为空条件循环)循环输出栈元素; Function3:void push(stackNodePtr *topPtr,int value //进栈 (1):建新的头指针; (2):申请空间; (3):利用if判断newPtr不为空时循环进栈 (4):把输入的value赋值给newPtr,在赋值给topPtr,再指向下一个位置; Function4:int pop(stackNodePtr*topPtr) //删除 (1):建新的头指针newPtr; (2):利用if判断newPtr是否为空,再删除元素。 (3):把topPtr等于newPtr,把头指针指向的数据赋值给topValue,输出要删除的数据值,头指针指向下一个位置,并清空newPtr; (4):完成上述步骤后,return toPvalue,返回;

数据结构伪代码转化成为可执行源代码修订稿

数据结构伪代码转化成为可执行源代码 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

数据结构伪代码转化为源代码尊重原作者的劳动,我只是个学习者,见此文章,感觉很有用,愿与大家一起分 享 -----百度文库:桔紫蓝 */ -------------------------------------------------------------------------------------- */ 出自:编程中国 */ 时间: 2007-10-26编程论坛首发 */ 声明:尊重作者劳动,转载请保留本段文字 */ -------------------------------------------------------------------------------------- 前言:这些是前几年我在大专教书时,数据结构课程中给学生写的学习例程,对于初学者有一定帮助。在此收集到一起,当个共享贴贡献给广大网友和编程爱好者。一般程序都不难也不大,并且所有例程均有较详细注释,适合自学。中间有一个“哈夫曼编码”,程序较大,希望能给大家一点启示。以下所有程序均在VC++开发环境中调试通过,运行正常。有任何疑问可以“另外”发贴讨论。更多内容请访问我的博客。 自认为本贴内容充实,对网友会所很大帮助,请版主或者管理员置顶加精,谢谢。 数据结构与算法基本程序目录 一、线性表及其操作 1、尾插法建立一个单链表,并按顺序输出 2、单链表的元素查找,按内容查找 3、元素插入操作 4、按内容元素删除操作 5、按位置删除元素

6、建立双向链表 7、单链表就地逆置 8、约瑟夫环问题 二、栈及其操作 1、建立堆栈 2、进栈与出栈 3、栈的应用,括号匹配 三、队及其操作 1、链队列的建立 2、入队和出队 3、循环队列建立 4、循环队列的入队和出队操作 四、串及其操作 1、串的朴素匹配 五、树(二叉树)及其操作 1、二叉排序树 2、哈夫曼编码 六、排序 1、冒泡排序 2、直接选择排序法 一、线性表及其操作

数据结构 栈和队列的基本操作实现及其应用

实验二栈和队列的基本操作实现及其应用 一、实验目的 1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。 2、会用栈和队列解决简单的实际问题。 二、实验内容(可任选或全做) 题目一、试写一个算法,判断依次读入的一个以@为结束符的字符序列, 是否为回文。所谓“回文“是指正向读和反向读都一样的一字符串,如“321123”或“ableelba”。 相关常量及结构定义: # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 # define OK 1 # define ERROR 0 typedef int SElemType; //栈类型定义 typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; }SqStack; 设计相关函数声明: 判断函数:int IsReverse() 栈:int InitStack(SqStack &S ) int Push(SqStack &S, SElemType e ) int Pop(SqStack &S,SElemType &e) int StackEmpty(s) 题目二、编程模拟队列的管理,主要包括: 出队列、 入队、 统计队列的长度、 查找队列某个元素e、 及输出队列中元素。 [实现提示]:参考教材循环队列的有关算法,其中后两个算法参考顺序表的实现。 题目三、Rails

Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, it turned out that the station could be only a dead-end one (see picture) and due to lack of available space it could have only one track. The local tradition is that every train arriving from the direction A continues in the direction B with coaches reorganized in some way. Assume that the train arriving from the direction A has N <= 1000 coaches numbered in increasing order 1, 2, ..., N. The chief for train reorganizations must know whether it is possible to marshal coaches continuing in the direction B so that their order will be a1, a2, ..., aN. Help him and write a program that decides whether it is possible to get the required order of coaches. You can assume that single coaches can be disconnected from the train before they enter the station and that they can move themselves until they are on the track in the direction B. You can also suppose that at any time there can be located as many coaches as necessary in the station. But once a coach has entered the station it cannot return to the track in the direction A and also once it has left the station in the direction B it cannot return back to the station. Input The input consists of blocks of lines. Each block except the last describes one train and possibly more requirements for its reorganization. In the first line of the block there is the integer N described above. In each of the next lines of the block there is a permutation of 1, 2, ..., N. The last line of the block contains just 0. The last block consists of just one line containing 0. Output

相关文档
相关文档 最新文档