数据结构与算法程序设计总结
by ldc
难度:北京大学数学科学学院数据结构与算法(B)
教材:《算法与数据结构——C语言描述》(第三版) 张乃孝,陈光,孙猛 编著
Chapter2 线性表
顺序表,单链表,双链表(可以向前也可以向后),循环链表(最后一个结点指向头结点),循环双链表
作业1:顺序表 错题: 多项式加法(不知道发生了啥事,看来还是越简单(sort)越容易对) 数组元素循环右移(这个nb的,要记得mod m)
注意:链表要带头才比较好用,否则删除第一个节点需要特殊的操作 单链表:
struct node{
node * link;
Datatype info;
};
typedef node * pnode;
pnode createNullList(){
pnode pa=new(node);
pa->link=NULL;
return pa;
}
int isNull(pnode pa){
if(pa->link==NULL){
return 1;
}
else{
return 0;
}
}
void insert_back(pnode pa, Datatype tempinfo){
pnode tempp=pa;
while(tempp->link!=NULL){
tempp=tempp->link;
}
tempp->link=createNullList();
tempp->info=tempinfo;
}
int delete_back(pnode pa){
pnode tempp=pa;
if(isNull(pa)==1){
return 2;//empty
}
while(tempp->link->link!=NULL){
tempp=tempp->link;
}
delete(tempp->link->link);
tempp->link=NULL;
return 1;//删除成功
}作业3:注意一下斜杠的位置!‘\n’
Chapter3 字符串
核心算法:KMP(模式匹配算法) string和char的比较:string几乎没有什么缺点,但是有的时候做字符串截取的时候比较容易出错,一定要记牢字符串截取时的那些参数的含义 实现KMP:
#include <iostream>
using namespace std;
//KMP
struct str{
int len;
char word[1000];
};
str templ,target;
str input_(){
str tempstr;
tempstr.len=0;
char temp;
while((temp=cin.get())!=EOF){
if(temp=='\n'){
break;
}
if(temp!=' '){
if(temp>='A'&&temp<='Z'){
temp=temp-'A'+'a';
}
tempstr.word[tempstr.len]=temp;
tempstr.len++;
}
}
return tempstr;
}
int next_[1000]={0};
void calcuNext(){
int i,j,k;
next_[0]=-1;
k=-1;
i=0;
while(i<templ.len-1){
while(k>=0&&templ.word[i]!=templ.word[k]){
k=