資料結構源程式 棧 佇列和串

2021-09-10 17:27:48 字數 3767 閱讀 4534

(1)棧的定義

棧(stack)是一種特殊的線性表,其插入與刪除操作被限定在只能在表尾進行。對於棧來說,表頭被稱為棧底,表尾被稱為棧頂。其特性為後進先出

(2)相關程式

利用棧的特性實現將十進位制數轉換為其他進製資料。

順序儲存方式:

/*順序儲存方式實現棧*/

#include

#define elemtype int

#define maxsize 100

typedef

struct

seqstack;

/*將10進製x轉換為r進製*/

void

transform

(unsigned x,

unsigned r)

while

(p->top!=0)

printf

("\n");

}int

main()

return0;

}

鏈式儲存方式:
/*鏈式儲存方式實現棧*/

#include

typedef

struct node

linkstack;

/*將10進製x轉換為r進製*/

void

transform

(unsigned x,

unsigned r)

p=top;

printf

("result:");

while

(p!=

null

)printf

("\n");

}int

main()

return0;

}

(1)佇列的定義

佇列特性與棧相反,是一種先進先出的線性表。其只允許在一端插入,另一端刪除,分別叫做隊尾隊頭

(2)相關程式

迴圈佇列的實現:

/*順序儲存方式實現迴圈佇列*/

#include

#define elemtype int

#define maxsize 10

typedef

struct

seqqueue;

/*隊尾新增元素*/

intenqueue

(seqqueue *q,elemtype x)

else

}/*刪除佇列*/

elemtype delqueue

(seqqueue *q)

q->front=

(q->front+1)

%maxsize;

val=

(q->data)

[q->front]

;return val;

}int

main()

printf

("the queue is like: \n");

while

(q.front!= q.rear)

printf

("\n\n");

delqueue

(&q)

;//刪除佇列

return0;

}

(1)串的定義

串(string)是由n個字元構成的有限序列,其可表示如下:

'a 1,a

2,···,a

n' (2)相關程式

串的實現:

#include

#define maxsize 100

typedef

struct

seqstring;

/*生成字串*/

seqstring substring

(seqstring s,

int i,

int j)

return sub;

}/*串的比較*/

intequal

(seqstring s1, seqstring s2)

/*串的模式匹配*/

intindex

(seqstring s, seqstring sub)

else

//以串s的每個元素為起點一一匹配sub

if(j == sub.len)

return i-sub.len;

//返回匹配成功位置

else

return-1

;}intmain()

//輸出串

printf

("the original string:\ns=");

for(j =

0; j)printf

("%c"

,s.ch[j]);

printf

("\n");

//求字串,輸入字串起點和終點

printf

("input start position and length of substring(pos.len): \n");

scanf

("%d,%d"

,&pos,

&len)

; sub =

substring

(s,pos,len)

;printf

("the substring:\nsub = ");

for(j =

0; j)printf

("%c"

, sub.ch[j]);

printf

("\n");

//判斷輸入字串是否相等

printf

("\"s1=(ended with #)\"\n");

//輸入串1

j=0;fflush

(stdin);

while

((c =

getchar()

)!='#')

printf

("\"s2=(ended with #)\"\n");

//輸入串2

j =0;

fflush

(stdin);

while

((c =

getchar()

)!='#')if(

equal

(s1,s2)

)printf

("s1 = s2\n");

else

printf

("s1 != s2\n");

//模式匹配

printf

("input a substring for index: \nsub = ");

j =0;

sub.len =0;

fflush

(stdin);

while

((c =

getchar()

)!='#')

//重新輸入串sub if(

index

(s,sub)==-

1)printf

("not exist");

else

printf

("the first position to find sub in s is:%d"

,index

(s,sub));

printf

("\n");

return0;

}

//待更新

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...