1. 程式人生 > >資料結構與演算法:順序串基本操作

資料結構與演算法:順序串基本操作

#include "iostream"


using namespace std;


#define MaxSize 100
typedef struct{
char data[MaxSize];
int length;
}SqString;


void Assign(SqString &s,char str[]){
int i=0;
while(str[i]!='\0'){
s.data[i]=str[i];
i++;
}
s.length=i;
}


void Destroystr(SqString s){

}


void StrCopy(SqString &s,SqString t){
int i;
for(i=0;i<t.length;i++){
s.data[i]=t.data[i];

}
s.length=t.length;
}


int StrLength(SqString s){
return s.length;

}




int StrEqual(SqString s,SqString t){
int i=0;
if(s.length!=t.length){
return 0;

}
else{
for(i=0;i<s.length;i++){
if(s.data[i]!=t.data[i]){
return 0;
}

}
return 1;
}
}




SqString Concat(SqString s,SqString t){
SqString r;
int i,j;
for(i=0;i<s.length;i++){
r.data[i]=s.data[i];

}
for(j=0;j<t.length;j++){
r.data[s.length+j]=t.data[j];
}
r.length=i+j;
return r;

}




SqString SubStr(SqString s,int i,int j){
SqString t;
int k;
if(i<1||i>s.length||j<1||i+j>s.length+1){
t.length=0;
}else{
for(k=i-1;k<i+j;k++){
t.data[k-i+1]=s.data[k];

}
t.length=j;
}
return t;
}


int Index(SqString s,SqString t){
int i=0,j=0;
while(i<s.length&&j<t.length){
if(s.data[i]==t.data[j]){
i++;j++;
}
else{
i=i-j+1;
j=0;
}

}
if(j>=t.length){
return i-t.length+1;
}
else{
return 0;
}
}


int InsStr(SqString &s,int i,SqString t){
int j;
if(i<1||i>s.length+1){
return 0;
}else{
for(j=s.length-1;j>=i-1;j--){
s.data[j+t.length]=s.data[j];

}
for(j=0;j<t.length;j++){
s.data[i+j-1]=t.data[j];

}
s.length=s.length+t.length;
return 1;
}
}


int DelStr(SqString &s,int i,int j){
int k;
if(i<1||i>s.length||j<1||i+j>s.length+1){
return 0;
}
else{
for(k=i+j-1;k<s.length;k++){
s.data[k-j]=s.data[k];
}
s.length=s.length-j;
return 1;
}
}




SqString RepStrAll(SqString s,SqString s1,SqString s2){
int i;
i=Index(s,s1);
while(i>0){
DelStr(s,i,s1.length);
InsStr(s,i,s2);
i=Index(s,s1);
}
return s;
}




void DispStr(SqString s){
int i;
for(i=0;i<s.length;i++){
cout<< s.data[i];

}
cout<"\n";

}

以上是標頭檔案

#include <iostream>
#include "SqString.h"


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char** argv) {
SqString s1,s2,s3,s4,s5,s6;
Assign(s1,"abcdefghijk");
cout<<"s1";DispStr(s1);
cout<<StrLength(s1)<<"\n";
StrCopy(s2,s1);
cout<<"s2";
DispStr(s2);
cout << StrEqual(s1,s2);
Concat(s1,s2);
DispStr(s1);cout<<"\n";
SubStr(s1,2,3);
DispStr(s1);cout<<"\n";
Index(s1,s2);
DispStr(s1);cout<<"\n";
InsStr(s1,1,s2);
DispStr(s1);cout<<"\n";
DelStr(s1,1,2);
DispStr(s1);cout<<"\n";
RepStrAll(s1,s2,s3);
DispStr(s1);cout<<"\n";
return 0;
}

相關推薦

資料結構演算法順序基本操作

#include "iostream"using namespace std;#define MaxSize 100typedef struct{char data[MaxSize];int length;}SqString;void Assign(SqString &

資料結構演算法》-單鏈表基本操作的C語言實現

最近在學演算法內容,發現很多演算法依賴於基本的資料結構,所以從新溫習資料結構,記錄一下,以後知識點忘記可以提醒自己哪裡比較容易出錯。 所用教材《資料結構與演算法分析》by Mark Allen Weiss 《資料結構》(C語言

資料結構演算法B樹(B-Tree)定義及搜尋、插入、刪除基本操作

B樹(B-Tree) 在介紹什麼是B樹(B-Tree)之前,先看看為什麼存在B樹結構? B樹(B-Tree)是為磁碟或者其他輔助儲存裝置而設計的一種平衡搜尋樹,如有的資料庫系統使用B樹或者B樹的變種來儲存資訊。B樹的節點可以有很多孩子,從數個到數千個,不同於一

資料結構演算法常用排序演算法總結

排序演算法穩定性的簡單形式化定義為:如果Ai = Aj,排序前Ai在Aj之前,排序後Ai還在Aj之前,則稱這種排序演算法是穩定的。通俗地講就是保證排序前後兩個相等的數的相對順序不變。   對於不穩定的排序演算法,只要舉出一個例項,即可說明它的不穩定性;而對於穩定的排序演算法,必須對演算

資料結構演算法15-圖的基本資料操作

基本資料操作 ADT  圖(Graph) Data        頂點的有窮非空集合和邊的集合 Operation           CreateGraph(*G,V,VR):V點集,VR邊弧集的定義構造圖G           DestroyGraph(*G)

資料結構演算法B+樹(B+Tree)介紹及其B樹比較

定義 前面介紹了B樹及其基本操作,B+樹是B樹的一個變種。與B樹一樣,B+樹通常用於諸如資料庫和磁碟檔案系統等輔助儲存系統,輔助儲存系統一般容量大,但是資料存取速度比記憶體慢幾個數量級。B樹和B+樹結構減少輔存系統訪問次數,從而加快整體資料存取速度。兩者有一些共

資料結構演算法】一、基本

一、絮絮叨叨 計劃寫一系列資料結構與演算法的部落格: 一是給自己立個flag——堅持做完, 二是記錄自己的學習過程,總結和分享知識 1、Why? 面試 =》考查基礎 =》資料結構與演算法 工作 =》有助於理解、使用框架;優化程式,提升效率、效能 鍛鍊邏輯思

資料結構演算法分析-順序表 SequenceList

一.基本思路        由於Java和C語言對陣列的限制,陣列在宣告時就要確定長度,雖然C語言可以動態控制記憶體分配,但也需要人為操作,且不會有是否越界的驗證。順序表的功能為可以隨時在陣列內插入、刪除,而不用擔心陣列越界。具體思路為在建立新的順序表時人為設定順序表的長度

資料結構演算法關於野人過河問題的課程設計

野人過河問題 【問題描述】 有x個野人和y個傳教士來到河邊渡河,河岸有一條船,每次至多可供2人乘渡,野人和傳教士都會划船。在河岸,如果野人人數多於傳教士人數,則野人會吃掉傳教士。請設計一個程式來描述安全過河過程。 【基本要求】 (1)在河兩岸和船上要求野人的人數不大於傳教士的人數。 (2)要

資料結構演算法順序表C語言實現

順序表等相關概念請自行查閱資料,這裡主要是實現。 注: 1.順序表C語言實現; 2.按較簡單的方式實現,主要幫助理解,可在此基礎上修改,更加完善; 3.提供幾個簡單函式,可自行新增功能; 4.可用C++封裝,得知STL中vector原理。    順序表容量。 #def

資料結構演算法 快速排序

void quickSort(vector<int> &arra, int L, int R) { int *p; p = partition2(arra, L, R); cout << p[0] <<

資料結構演算法 排序1

1 氣泡排序 2 選擇排序 3 插入排序     #include <iostream> #include <vector> using namespace std; class Solution { public: //氣泡

資料結構演算法二叉樹

二叉樹是一種非常常見並且實用的資料結構,它結合了有序陣列與連結串列的優點。在二叉樹中查詢資料與在陣列中查詢資料一樣快,在二叉樹中新增、刪除資料的速度也和在連結串列中一樣高效,所以有關二叉樹的相關技術一直是程式設計師面試筆試中必考的知識點。 基礎知識 二叉樹(Bi

資料結構演算法快速排序

快速排序 快速排序(英語:Quicksort),又稱劃分交換排序(partition-exchange sort),通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行

資料結構演算法 插入排序

插入排序 插入排序(英語:Insertion Sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

資料結構演算法 選擇排序

選擇排序 選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 選擇排序

資料結構演算法 氣泡排序

氣泡排序 氣泡排序(英語:Bubble Sort)是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”

資料結構演算法時間複雜度大O表示法

1、概念: 我們知道,時間複雜度和“大O表示法”是我們經常會碰到的概念,它們是用來衡量演算法優劣的度量,那具體怎麼算的呢?來看一下 2、引例 在丟擲概念之前,咱先來個例子: 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 為自然數),如何求出所有a、b

資料結構演算法二分查詢

資料結構與演算法:二分查詢 最近看到一本關於資料結構的書,甚是有趣,稍以記載,方便以後回憶! 一、二分查詢 假設要在電話簿中找一個名字以K打頭的人,(現在誰還用電話簿!)可以從頭開始翻頁,直到進入以K打頭的部分。但你很可能不這樣做,而是從中間開始,因為你知道以K打頭的名字在電話簿中間

資料結構演算法紅黑樹(Red Black Tree)

一、簡介 紅黑樹(Red Black Tree)是一棵二叉查詢樹,在每個節點增加一個屬性表示節點顏色,值為紅色(Red)或者黑色(Black)。紅黑樹也是“平衡”樹中的一種,通過對任何一條從根到葉子的路徑上各個節點的顏色來進行約束,確保沒有一條路徑會比其他