数据结构C语言版 串的定长顺序存储表示和实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=1;i<=S1[0];i++){
T[i]=S1[i];}
for(i=1;i<=MAXSTRLEN-S1[0];i++){
T[S1[0]+i]=S2[i];}
T[0]=MAXSTRLEN;
uncut=FALSE;
}
else{
for(i=0;i<=MAXSTRLEN;i++){
T[i]=S1[i];}
return ERROR;
T[0]=strlen(chars);
for(i=0;i<=T[0];i++){
T[i+1]=chars[i];}
return OK;
}//StrAssign
//输ห้องสมุดไป่ตู้串
void StrPrint(SString S){
int i;
for(i=1;i<=S[0];i++){
printf("%c",S[i]);
if(S[0]==0)
return OK;
else
return ERROR;
}//StrEmpty
//串比较操作
int StrCompare(SString S,SString T){
int i;
for(i=1;i<=S[0]&&i<=T[0];++i)
if(S[i]!=T[i])
return S[i]-T[i];
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAXSTRLEN 255
typedef int ElemType;
if(S1[0]+S2[0]<=MAXSTRLEN){
for(i=1;i<=S1[0];i++){
T[i]=S1[i];}
for(i=1;i<=S2[0];i++){
T[S1[0]+i]=S2[i];}
T[0]=S1[0]+S2[0];
uncut=TRUE;
}
else if(S1[0]<MAXSTRLEN){
for(i=1;i<=len;i++){
Sub[i]=S[pos+i-1];}
Sub[0]=len;
return OK;
}//SubString
//求子串位置操作
int Index(SString S,SString T,int pos){
int i,j;
i=pos;
j=1;
while(i<=S[0]&&j<=T[0]){
if(S[i]==T[j]) {
++i;
++j;
}
else{//指针后退重新开始匹配
i=i-j+2;
j=1;
}
}
if(j>T[0])
return i-T[0];//匹配成功
return 0;//匹配失败
}//Index
//串插入操作
Status StrInsert(SString S,int pos,SString T){
//操作结果:从串S中删除第pos个字符起长度为len的子串
int i;
if(pos<1||pos>S[0]-len+1||len<0)
return ERROR;
for(i=pos+len;i<=S[0];i++){
S[i-len]=S[i];}
S[0]-=len;
return OK;
}//StrDelete
void main(){
int pos,len;
SString S1,S2,S3,T,Sub;
char a[10],b[10];
printf("输入两个串分别赋值给S1,S2(串长均小于10):\n");
typedef int Status;
typedef unsigned char SString[MAXSTRLEN+1];
//串赋值操作
Status StrAssign(SString T,char chars[]){
//生成一个其值等于chars的串T
int i;
if(strlen(chars)>MAXSTRLEN)
return S[0]-T[0];
}//StrCompare
//求长度操作
int StrLength(SString S){
return S[0];
}//StrLength
//串连接操作
Status Concat(SString T,SString S1,SString S2){
int i;
Status uncut;
for(i=pos;i<pos+T[0];i++){
S[i]=T[i-pos+1];}
S[0]=MAXSTRLEN;
return FALSE;
}
}//StrInsert
//串删除操作
Status StrDelete(SString S,int pos,int len){
//初始条件:串S存在,1≤pos≤StrLength(S)-len+1
//初始条件:串S和T存在,1≤pos≤StrLength(S)+1
//操作结果:在串S的第pos个字符之前插入串T。完全插入返回TRUE,部分插入返回FALSE
int i;
if(pos<1||pos>S[0]+1)
return ERROR;
if(S[0]+T[0]<=MAXSTRLEN){ //完全插入
}
printf("\n");
}//PrnStr
//串复制操作
Status StrCopy(SString T,SString S){
//由串S复制得串T
int i;
for(i=1;i<=S[0];i++)
T[i]=S[i];
T[0]=S[0];
return OK;
}//StrCopy
//判空操作
Status StrEmpty(SString S){
for(i=S[0];i>=pos;i--){
S[i+T[0]]=S[i];}
for(i=pos;i<pos+T[0];i++){
S[i]=T[i-pos+1];}
S[0]=S[0]+T[0];
return TRUE;
}
else{
for(i=MAXSTRLEN;i>=pos;i++){
S[i]=S[i-T[0]];}
uncut=FALSE;
}
return uncut;
}//Concat
//取子串操作
Status SubString(SString Sub,SString S,int pos,int len){
int i;
if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
return ERROR;
T[i]=S1[i];}
for(i=1;i<=MAXSTRLEN-S1[0];i++){
T[S1[0]+i]=S2[i];}
T[0]=MAXSTRLEN;
uncut=FALSE;
}
else{
for(i=0;i<=MAXSTRLEN;i++){
T[i]=S1[i];}
return ERROR;
T[0]=strlen(chars);
for(i=0;i<=T[0];i++){
T[i+1]=chars[i];}
return OK;
}//StrAssign
//输ห้องสมุดไป่ตู้串
void StrPrint(SString S){
int i;
for(i=1;i<=S[0];i++){
printf("%c",S[i]);
if(S[0]==0)
return OK;
else
return ERROR;
}//StrEmpty
//串比较操作
int StrCompare(SString S,SString T){
int i;
for(i=1;i<=S[0]&&i<=T[0];++i)
if(S[i]!=T[i])
return S[i]-T[i];
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAXSTRLEN 255
typedef int ElemType;
if(S1[0]+S2[0]<=MAXSTRLEN){
for(i=1;i<=S1[0];i++){
T[i]=S1[i];}
for(i=1;i<=S2[0];i++){
T[S1[0]+i]=S2[i];}
T[0]=S1[0]+S2[0];
uncut=TRUE;
}
else if(S1[0]<MAXSTRLEN){
for(i=1;i<=len;i++){
Sub[i]=S[pos+i-1];}
Sub[0]=len;
return OK;
}//SubString
//求子串位置操作
int Index(SString S,SString T,int pos){
int i,j;
i=pos;
j=1;
while(i<=S[0]&&j<=T[0]){
if(S[i]==T[j]) {
++i;
++j;
}
else{//指针后退重新开始匹配
i=i-j+2;
j=1;
}
}
if(j>T[0])
return i-T[0];//匹配成功
return 0;//匹配失败
}//Index
//串插入操作
Status StrInsert(SString S,int pos,SString T){
//操作结果:从串S中删除第pos个字符起长度为len的子串
int i;
if(pos<1||pos>S[0]-len+1||len<0)
return ERROR;
for(i=pos+len;i<=S[0];i++){
S[i-len]=S[i];}
S[0]-=len;
return OK;
}//StrDelete
void main(){
int pos,len;
SString S1,S2,S3,T,Sub;
char a[10],b[10];
printf("输入两个串分别赋值给S1,S2(串长均小于10):\n");
typedef int Status;
typedef unsigned char SString[MAXSTRLEN+1];
//串赋值操作
Status StrAssign(SString T,char chars[]){
//生成一个其值等于chars的串T
int i;
if(strlen(chars)>MAXSTRLEN)
return S[0]-T[0];
}//StrCompare
//求长度操作
int StrLength(SString S){
return S[0];
}//StrLength
//串连接操作
Status Concat(SString T,SString S1,SString S2){
int i;
Status uncut;
for(i=pos;i<pos+T[0];i++){
S[i]=T[i-pos+1];}
S[0]=MAXSTRLEN;
return FALSE;
}
}//StrInsert
//串删除操作
Status StrDelete(SString S,int pos,int len){
//初始条件:串S存在,1≤pos≤StrLength(S)-len+1
//初始条件:串S和T存在,1≤pos≤StrLength(S)+1
//操作结果:在串S的第pos个字符之前插入串T。完全插入返回TRUE,部分插入返回FALSE
int i;
if(pos<1||pos>S[0]+1)
return ERROR;
if(S[0]+T[0]<=MAXSTRLEN){ //完全插入
}
printf("\n");
}//PrnStr
//串复制操作
Status StrCopy(SString T,SString S){
//由串S复制得串T
int i;
for(i=1;i<=S[0];i++)
T[i]=S[i];
T[0]=S[0];
return OK;
}//StrCopy
//判空操作
Status StrEmpty(SString S){
for(i=S[0];i>=pos;i--){
S[i+T[0]]=S[i];}
for(i=pos;i<pos+T[0];i++){
S[i]=T[i-pos+1];}
S[0]=S[0]+T[0];
return TRUE;
}
else{
for(i=MAXSTRLEN;i>=pos;i++){
S[i]=S[i-T[0]];}
uncut=FALSE;
}
return uncut;
}//Concat
//取子串操作
Status SubString(SString Sub,SString S,int pos,int len){
int i;
if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
return ERROR;