程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 數據結構之---C語言實現串的順序存儲

數據結構之---C語言實現串的順序存儲

編輯:關於C語言

數據結構之---C語言實現串的順序存儲


//C語言串的順序存儲表示
//串的堆分配存儲表示
//楊鑫
#include 
#include 
#include 
#define MAXSTRLEN 255
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

//定義數據元素結的構
typedef int Status;
typedef struct 
{
		char *ch;
		int length;
}HString;

//生成一個其值等於串常量chars的串T
 Status StrAssign(HString *T,char *chars)
 { 
   int i,j;
   if((*T).ch)
     free((*T).ch); 
   i=strlen(chars); 
   if(!i)
   { 
     (*T).ch=NULL;
     (*T).length=0;
   }
   else
   { 
     (*T).ch=(char*)malloc(i*sizeof(char));
     if(!(*T).ch)
       exit(OVERFLOW);
     for(j=0;jS.length||len<0||len>S.length-pos+1)
     return ERROR;
   if((*Sub).ch)
     free((*Sub).ch); 
   if(!len) 
   {
     (*Sub).ch=NULL;
     (*Sub).length=0;
   }
   else
   { 
     (*Sub).ch=(char*)malloc(len*sizeof(char));
     if(!(*Sub).ch)
       exit(OVERFLOW);
     for(i=0;i<=len-1;i++)
       (*Sub).ch[i]=S.ch[pos-1+i];
     (*Sub).length=len;
   }
   return OK;
 }

 void InitString(HString *T)
 {
   (*T).length=0;
   (*T).ch=NULL;
 }

 int Index(HString S,HString T,int pos)
 { 
   int n,m,i;
   HString sub;
   InitString(&sub);
   if(pos>0)
   {
     n=StrLength(S);
     m=StrLength(T);
     i=pos;
     while(i<=n-m+1)
     {
       SubString(&sub,S,i,m);
       if(StrCompare(sub,T)!=0)
     ++i;
       else
     return i;
     }
   }
   return 0;
  }

 Status StrInsert(HString *S,int pos,HString T) 
 { 
   int i;
   if(pos<1||pos>(*S).length+1)
     return ERROR;
   if(T.length) 
   {
     (*S).ch=(char*)realloc((*S).ch,((*S).length+T.length)*sizeof(char));
     if(!(*S).ch)
       exit(OVERFLOW);
     for(i=(*S).length-1;i>=pos-1;--i) 

       (*S).ch[i+T.length]=(*S).ch[i];
     for(i=0;i';
   printf("串s%c串t\n",c);
   Concat(&r,t,s);
   printf("串t聯接串s產生的串r為: ");
   StrPrint(r);
   StrAssign(&s,"oo");
   printf("串s為: ");
   StrPrint(s);
   StrAssign(&t,"o");
   printf("串t為: ");
   StrPrint(t);
   Replace(&r,t,s);
   printf("把串r中和串t相同的子串用串s代替後,串r為:\n");
   StrPrint(r);
   ClearString(&s);
   printf("串s清空後,串長為 : %d 是否為空?%d ( 1 : 空 0 : 否)\n",StrLength(s),StrEmpty(s));
   SubString(&s,r,6,4);
   printf("串s為從串r的第6個字符起的4個字符,長度為 %d 串s為: ",s.length);
   StrPrint(s);
   StrCopy(&t,r);
   printf("復制串t為串r,串t為: ");
   StrPrint(t);
   StrInsert(&t,6,s);
   printf("在串t的第6個字符前插入串s後,串t為: ");
   StrPrint(t);
   StrDelete(&t,1,5);
   printf("從串t的第1個字符起刪除5個字符後,串t為: ");
   StrPrint(t);
   printf("%d是從串t的第1個字符起,和串s相同的第1個子串的位置\n",Index(t,s,1));
   printf("%d是從串t的第2個字符起,和串s相同的第1個子串的位置\n",Index(t,s,2));
   return 0;
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved