STEP3。チームday4スタックとリニアテーブルのデータ構造

追加:循環リストの初心者は、単方向(または双方向)リストの無限循環リストを想像するのは、マルチ図面に加えて、理解できないことがあり、各要素は、理解した方がよい、中間要素です。

1.スタックは、二つの特別なチームや管理ロジックリニアテーブル、両方の線形形式です

2.スタックの原理はビスケットの樽に似て、(最初のうち最後で)、FILOで初めて、最初に削除され、最後に過ごしたロードされ、動作のみをポップスタックをプッシュすることができます

3.チームの原理は水に似FIFO(先入れ先出し)で、うちの最初の最初にある、水は水の中に最初に流れている、唯一の尾に挿入することができ、キューの先頭には、操作を削除します。

 

①順次記憶構造スタックの実装、およびリストの順序は、のように、単にスタックの規則に従う必要があります

②リンクリスト構造は、スタックを達成するために


書式#include <stdio.hに>
する#include <stdlib.h>に含ま


データ型のint型のtypedef;
typedefは構造体{スタック
データ型データ、
構造体スタック*次; //スタック位置
} linkstack。

//空のスタック1の作成
linkstackのlinkstack_create *()
{
linkstackのS * = NULLを、
S =(linkstack *)はmalloc(はsizeof(linkstack))。

S->次= NULL;

sを返します。
}

2 //スタックプッシュ動作
ボイドlinkstack_push(linkstack Sが*、int値)
{
linkstack linkstack_create * TEMP =();
temp->データ=値。

一方、(S->次= NULL!){S = S->次;}

temp->次= S->次。
S->次=温度;
}


スタックを解析空である//
INT linkstack_is_empty(linkstack Sが*)
{
S->次に== NULLを返す1:0 ;?
}

// 4出栈弹栈
INT linkstack_pop(linkstackの* S)
{
IF(linkstack_is_empty(S)== 1)
{
のprintf( "スタックが空である\ n");
-1を返します。
}

int型の値。
linkstack * TEMP。
一方、(S->ネクスト>次= NULL!){S = S->次;}
値= S->ネクスト>データ。
TEMP = S->次。
S->次= NULL;
無料(TEMP)。
温度= NULL;

値を返します。
}

//打印栈里面的所有值
INT linkstack_show(linkstack * S)
{
IF(linkstack_is_empty(S)== 1)
{
のprintf( "スタックが空である\ n");
-1を返します。
}
ながら(!S->次= NULL){
のprintf( "%d個"、S->ネクスト>データ)。
S = S->次。
}
のprintf( "の\ n");
0を返します。
}

INTメイン(int型ARGC、CONSTのchar * ARGV [])
{
linkstack * S = NULL;
S = linkstack_create()。

linkstack_push(s、1)。
linkstack_push(s、2)。
linkstack_push(s、3)。
linkstack_push(s、4)。
linkstack_push(S、5)。
linkstack_push(s、6)。

linkstack_show(S);

printf( "%d個の\ n"、linkstack_pop(S))。
linkstack_show(S);
0を返します。
}

③順次、私はサイクルキューを達成するために、キュー値の尾と頭の間の関係を知っている必要があり、相互取って、達成チームを保存します


書式#include <stdio.hに>
する#include <stdlib.h>に含ま

#define N 32

typedefは構造体のキュー{
int型の日付[N]。
int型のフロント。
int型のリア。
} sequeue。

sequeue * sequeue_creat(){
sequeue * Q = NULL;
Q =(sequeue *)はmalloc(はsizeof(sequeue))。

Q->フロント= 0。
0 = Q->リア。
Qを返します。
}

INT sequeue_is_full(sequeue * Q){
リターン(Q->リア+ 1)%N == Q->フロント?1:0。
}

int型sequeue_is_empty(sequeueの*のQ){
>リア== Q->フロントQ-返しますか?1:0。
}

int型sequeue_input(sequeue * Q、INT値){
IF(sequeue_is_full(Q)){
のprintf( "sequeue_is_fullする\ n");
-1を返します。
}

Q->日付[Q->リア] =値。
Q->リア=(Q->リア+ 1)%N。
0を返します。
}

int型sequeue_output(sequeue * Q){
IF(sequeue_is_empty(Q)){
のprintf( "sequeue_is_emptyする\ n");
-1を返します。
}
int値。
値= Q->日付[Q->フロント]。
Q->フロント=(Q->フロント+ 1)%N。
値を返します。
}

ボイドsequeue_show(sequeueの*のQ){

int型私= 0;
以下のための(I = Q->フロント; I = Q->リア;!I =((I + 1)%N)){
のprintf( "%d個"、Q->日付[I])。
}
のprintf( "の\ n");

}

 


INTメイン(int型ARGC、CONSTのchar *のARGV [])
{

sequeue * Q = NULL;
Q = sequeue_creat()。

sequeue_input(Q 1)。
sequeue_input(Q 2)。
sequeue_input(Q 3)。
sequeue_input(Q、4)。
sequeue_input(Q 5)。
sequeue_input(Q 6)。

sequeue_show(Q)。

printf( "%d個の\ n"、sequeue_output(Q))。
sequeue_show(Q)。

0を返します。
}

③ストレージチームのリストを実装するためのフォームなどを単独リンクリスト、フロントおよびprivを維持するための指針


書式#include <stdio.hに>
する#include <stdlib.h>に含ま

//フォース部材構造
のtypedef構造体{linkqueueの
int型のDATE、
構造体*次linkqueue;
} linkqueue。

//フォースヘッドとテールポインタ構造
typedefは構造体{lnqueue
構造体linkqueue *フロント、
構造体linkqueue * PRIV;
} lnqueue。

//ノード関数作成
linkqueue linkqueue_creatの*(){
linkqueueヘッド* = NULLと、
ヘッド=(linkqueue *)はmalloc(はsizeof(linkqueue));

頭部>次に= NULL;
戻りヘッド;
}

//ポインタキューのヘッドとチーム作成
lnqueueのlnqueue_creatの*(){
linkqueueヘッド* = NULL;
ヘッド= linkqueue_creat();
lnqueue * LN = NULL;
LN =(lnqueue *)はmalloc(はsizeof(lnqueue))。

LN->フロント=ヘッド。
LN-> PRIV =ヘッド。
}

//尾に挿入され
、ボイドlnqueue_input(lnqueueの*のLN、int型の値){

linkqueue * TEMP = NULL;
TEMP = linkqueue_creat()。
temp->日付=値;

temp->次= LN-> priv->次。
LN-> priv->次=温度;
LN-> PRIV =温度;
}

//ヌルビットは、チームか否かが判断される
int型lnqueue_is_empty(lnqueueの*のLN){
戻りLN-> LNのフロント- ==> PRIV 1:?0;
}

//遍历
int型lnqueue_show(lnqueue *のLN){
場合(lnqueue_is_empty(LN)){
のprintf( "lnqueue_is_emptyの\ nを");
-1を返します。
}
linkqueue * TEMP = LN->フロント。
一方、(!temp->次= NULL){
のprintf( "%d個"、temp->ネクスト>日付)。
TEMP = temp->次。
}
のprintf( "の\ n");
0を返します。
}

//出队头删
int型lnqueue_output(lnqueueの*のLN){
場合(lnqueue_is_empty(LN)){
のprintf( "lnqueue_is_emptyの\ nを");
-1を返します。
}

linkqueue * TEMP = NULL;
int型の値。

TEMP = LN->フロント>次。
値= temp->日付。
LN->フロント>次= temp->次。
IF(LN-> PRIV == TEMP){
LN-> PRIV = LN->フロント。
}
フリー(TEMP)。
温度= NULL;

値を返します。


}

 

INTメイン(int型ARGC、CONSTのchar *のARGV [])
{
lnqueue * LN = NULL;
LN = lnqueue_creat()。

lnqueue_input(LN、1)。
lnqueue_input(LN 2)。
lnqueue_input(LN、3)。
lnqueue_input(LN、3)。
lnqueue_input(LN、3)。
lnqueue_input(LN、6)。

lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。

printf( "%d個の\ n"、lnqueue_output(LN))。
lnqueue_show(LN)。
0を返します。
}

 

おすすめ

転載: www.cnblogs.com/huiji12321/p/11233942.html