當前位置:首頁 » 編程語言 » PUSH8C語言偽碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

PUSH8C語言偽碼

發布時間: 2022-07-27 04:46:00

『壹』 關於嚴蔚敏c語言版數據結構的棧PUSH實現代碼

ElemType是筆誤S.base=(ElemType *)malloc (S.base, (S.stacksize+STACKINCREMENT)*sizeof(Elemtype));這個是分配一段內存,長度是(S.stacksize+STACKINCREMENT)*sizeof(Elemtype)這么多位元組,因為這個函數是重新分配的,所以也要分配表s.base的存儲空間

『貳』 類似流水燈程序,c語言編程,一共8個燈

我不知道你的點燈和滅燈函數是什麼,所以隨便取了一個,思路大概就是這樣
void main()
{
int pull[8]={0};
int push[8]={1,2,3,4,5,6,7,8};
int flag=0;
int i=0;
while(1)
{
if(flag==0)
{
for(i=0;i<8;i++)
{
pull[i]=push[i];
push[i]=0;
light(pull[i]);//點亮pull[i]數組裡面存放的燈一秒
turn(pull[i]);//滅pull[i]數組裡面存放的燈一秒
}
flag=1;
}
else
{
for(i=0;i<8;i++)
{
push[i]=pull[i];
pull[i]=0;
light(push[i]);//點亮push[i]數組裡面存放的燈一秒
turn(push[i]);//滅push[i]數組裡面存放的燈一秒
}
flag=0;
}
}

}

『叄』 C語言 十進制數轉換八進制 演算法

  1. 方法一:直接使用控制字元串 %o 八進制%x

  2. 方法二:

    求余來算,比如求十進制數 x(x>100) 的8進制,先通過 x%8 可以得到個位(末位)上的數,當十進制數等於8時,必然會進位,求余的結果正好是不能進位的部分,x=x/8(這就像位移,x的8進制數向右移了一位),這樣已經求出來的 個位 位移後沒有了,原來的十位變成了個位,繼續把得到的x按上面的方式求末位,就能求出來十位,按照這種方式得到的 8進制數 是反的(先得到個位,再十位。。。),這樣很適合放到棧中,取得時候又會反過來,偽代碼可以這樣寫:

    while(x){

    printf("%d",x%n);//會列印出x轉換為 N進制數 從低位到高位上的每一位數

    x/=n;

    }

  3. 十進制轉換N進制:

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    typedef int INT;

    typedef struct dd

    {

    INT data;

    struct dd *next;

    }LNode,*LStack;

    LStack pushstack(LStack top,int x)

    {

    LStack p;

    p=(LStack)malloc(sizeof(LNode));

    if((x)!=-1) {p->data=(x); p->next=top; top=p;}

    return top;

    }

    LStack outstack(LStack top,int *x)

    {

    LStack p=top;

    *x=p->data;

    top=p->next;

    free(p);

    return top;

    }

    main()

    {

    int x,n;

    LStack top=NULL;

    printf("請輸入原數及要轉換的進制:");

    do{

    scanf("%d%d",&x,&n); //輸入一個十進制數和要轉換的進制,比如3 2 得到1 }while(x>35||x<0||n<2);

    while(x){ //這個循環把每一位放到棧中

    top=pushstack(top,x%n);

    x/=n;

    while(top!=NULL)

    {

    top=outstack(top,&x);

    if(x<10)

    printf("%c",x+'0');

    else

    printf("%c",x+'A'-10);

    }

    return 0; }

『肆』 初學數據結構,麻煩大家把棧的基本操作用C語言描述一下,不要使用偽碼,如果可能盡量加上一下注釋,謝謝了

1、寫個ADT,分兩個文件寫 stack.h,stack.c,我是對照嚴蔚敏的書寫的,理解不了,可以對照著書看一下,代碼Linux下行動通過
2、stack.h代碼如下:
#ifndef _STACK_H
#define _STACK_H
#define stack_init_size 100 //存儲空間初始大小
#define stack_increment 10 //存儲空間分配增量
#define size sizeof(ElementType)
#define OK 1
#define ERROR 0
#define Empty 0
#define Nempty 1
typedef int ElementType;
typedef int status;
struct man{
ElementType *base;
ElementType *top;
int stacksize;
};
typedef struct man *stack;
typedef struct man strstack;
status Init_stack(stack s);
status Destroy_stack(stack s);
status Clear_stack(stack s);
status Is_empty(stack s);
int stacklength(stack s);
ElementType Get_top(stack s);
status push(stack s,ElementType e);
ElementType pop(stack s);
#endif

3、stack.c,代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"

status Init_stack(stack s)
{
if((s->base=(ElementType *)malloc(stack_increment*size))==NULL) exit(0);
s->top=s->base;
s->stacksize=stack_init_size;
return OK;
}

status Destroy_stack(stack s)
{
free(s->base);
return OK;
}

status Clear_stack(stack s)
{
s->top=s->base;
return OK;
}

status Is_empty(stack s)
{
if(s->top==s->base) return Empty;
else return Nempty;
}

int stacklength(stack s)
{
return s->top-s->base;
}

ElementType Get_top(stack s)
{
if(Is_empty==Empty) {printf("No record\n");exit(0);}
else return *(s->top-1);
}

status push(stack s,ElementType e)
{
if(s->top==s->base+stack_init_size)
{
s->base=(ElementType *)realloc(s->base,(s->stacksize+stack_increment)*size);
if(s->base==NULL) exit(0);
s->top=s->base+s->stacksize;
s->stacksize+=stack_increment;
}
*s->top=e;
s->top++;
return OK;
}

ElementType pop(stack s)
{
if(Is_empty(s)==Empty) exit(0);
s->top--;
return *s->top;
}

4、用的時候在主函數里用include"stack.h",就可以調用所有stack.h里聲明過的函數了

5、最後祝學業進步

『伍』 棧·請問這個C語言代碼中,主函數里Push()應該怎麼修改出錯在哪裡

s已經是地址了,不需要再添加取址符了,刪掉&就可以了

『陸』 C語言偽碼問題

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <malloc.h>

#define ClearScreen() system( "cls" )// 清屏
#define Pause( szPrompt ) printf( "%s", szPrompt ),getch()// 顯示字元串 szPrompt,等待用戶按下任意鍵

typedef struct carinformation // 車輛信息
{//汽車狀態,'A'為到達,'D'為離開,'G'顯示當前停車場和便道使用情況,'E'為輸入結束
char RegistrationMark[64]; // 車牌號
char ArrivalTime[16]; // 到達時間
char EntranceTime[16]; // 進入停車場(開始計費)時間
char DepartureTime[16]; // 離開時間
} TCARINFORMATION, *LPTCARINFORMATION;

typedef struct carstack
{
LPTCARINFORMATION lpCarInformation; // 車輛信息
int Top; // 棧頂元素下標
int StackSize; // 棧容量
} TCARSTACK, *LPTCARSTACK;

// 初始化棧 lpCarStack, 將其容量設置為 Size
void InitStack( LPTCARSTACK &lpCarStack, int Size )
{
lpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ) );
lpCarStack->lpCarInformation = ( LPTCARINFORMATION ) malloc(
Size * sizeof ( TCARINFORMATION )
);
lpCarStack->Top = -1;
lpCarStack->StackSize = Size;
}

// 車輛信息 carinfo 入棧 lpCarStack
void Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo )
{
lpCarStack->Top++;
lpCarStack->lpCarInformation[lpCarStack->Top] = carinfo;
}

// 車輛信息從棧 lpCarStack 中彈出並存入 carinfo
void Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo )
{
carinfo = lpCarStack->lpCarInformation[lpCarStack->Top];
lpCarStack->Top--;
}

// 若棧 lpCarstack 空,返回 TRUE;否則,返回 FALSE
BOOL IsStackEmpty( LPTCARSTACK lpCarStack )
{
return lpCarStack->Top == -1;
}

// 若棧 lpStackFull 滿,返回 TRUE;否則,返回 FALSE
BOOL IsStackFull( LPTCARSTACK lpCarStack )
{
return lpCarStack->Top == ( lpCarStack->StackSize - 1 );
}

// 銷毀棧 lpCarStack,將指針 lpCarStack 置為 NULL
void DestroyStack( LPTCARSTACK &lpCarStack )
{
free( lpCarStack->lpCarInformation );
free( lpCarStack );
lpCarStack = NULL;
}

typedef struct carnode // 鏈隊結點信息
{
TCARINFORMATION carinfo; // 車輛信息
struct carnode *lpNext; // 指向下一個元素的指針
} TCARNODE, *LPTCARNODE;

typedef struct carqueue // 鏈隊
{
LPTCARNODE lpHead; // 頭結點
LPTCARNODE lpRear; // 指向當前隊尾的指針
int EffectiveSize; // 當前隊中元素個數
} TCARQUEUE, *LPTCARQUEUE;

// 初始化鏈隊 lpCarQueue
void InitQueue( LPTCARQUEUE &lpCarQueue )
{
lpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE ) );
lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ) );
lpCarQueue->lpHead->lpNext = NULL;
lpCarQueue->lpRear = lpCarQueue->lpHead;
lpCarQueue->EffectiveSize = 0;
}

// 車輛信息 carinfo 入鏈隊 lpCarQueue
void EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION carinfo )
{
LPTCARNODE lpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode ) );
lpCarNode->carinfo = carinfo;
lpCarNode->lpNext = NULL;
lpCarQueue->lpRear->lpNext = lpCarNode;
lpCarQueue->lpRear = lpCarQueue->lpRear->lpNext;
lpCarQueue->EffectiveSize++;
}

// 隊頭元素從鏈隊 lpCarQueue 中出隊並存入 carinfo
void DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION &carinfo )
{
LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;
carinfo = lpTemp->carinfo;
lpCarQueue->lpHead->lpNext = lpTemp->lpNext;
free( lpTemp );
lpCarQueue->EffectiveSize--;
}

// 若鏈隊 lpCarQueue 為空,返回 TRUE;否則,返回 FALSE
BOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue )
{
return lpCarQueue->EffectiveSize == 0;
}

// 銷毀鏈隊 lpCarQueue
void DestroyQueue( LPTCARQUEUE &lpCarQueue )
{
LPTCARNODE lpNextCarNode = NULL;
for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead; lpCarNode != NULL; lpCarNode = lpNextCarNode )
{
lpNextCarNode = lpCarNode->lpNext;
free( lpCarNode );
}
free( lpCarQueue );
lpCarQueue = NULL;
}

// 將字元串時間格式轉換為數字(分鍾)格式,例如 12:36 將被轉換為 756 ( 12 * 60 + 36 )
int ConvertTimeFormat( char *lpTime )
{
int Hour = 0;
int Minute = 0;

sscanf( lpTime, "%d:%d", &Hour, &Minute );

return Hour * 60 + Minute;
}

// 根據在停車場內的停留時間 ContinuanceMinutes (分鍾)計算費用
double CalculateExpense( int ContinuanceMinutes )
{
return ContinuanceMinutes * ( 5.0 / 60 );
}

//主程序
int main( void )
{
int ParkCapability = -1; // 停車場容量

putchar( '\n' );
printf("|********************************************|\n");
printf("|******** ********|\n");
printf("|===========歡迎使用停車場管理系統===========|\n");
printf("|******** ********|\n");
printf("|********************************************|\n");
printf("———————————————————————\n\n\n\n");
printf("請輸入停車場容量:");
scanf( "%d", &ParkCapability) ;
loop:if(ParkCapability>=0) // 保證停車場容量為一個數字
printf("OK,輸入成功!");
else{
printf("錯誤,需要輸入一個數字!\n\n");
printf("請輸入停車場容量:");
fflush(stdin);
scanf( "%d", &ParkCapability) ;
goto loop ;
}

LPTCARSTACK lpCarStack = NULL; // 停車場,用棧模擬
InitStack( lpCarStack, ParkCapability );

LPTCARQUEUE lpCarQueue = NULL; // 便道,用鏈隊模擬
InitQueue( lpCarQueue );

char CommandType = NULL; // 命令類型
char UserInput[128] = { NULL }; // 用戶輸入
do
{
ClearScreen();
putchar( '\n' );
puts( "--------------------" );
puts( "[命令類型]" );
puts( "A - 車輛到達" );
puts( "D - 車輛離開" );
puts( "G - 顯示當前停車場和便道使用情況" );
puts( "E - 結束操作" );
putchar( '\n' );
puts( "例:" );
puts( "A,1,5" );
puts( "D,5,20" );
puts( "G,0,0" );
puts( "E,0,0" );
putchar( '\n' );
printf( "請輸入命令:" );
scanf( "%s", UserInput );

char CarInformation[128] = { NULL };
sscanf( UserInput, // 將命令類型與車輛信息分開存放
"%c,%s",
&CommandType, // 用戶輸入的前半部分,即命令類型
CarInformation // 用戶輸入的後半部分,即車輛信息
);

char *lpCommaLocation = NULL; // 車輛信息字元串中的逗號位置

for ( lpCommaLocation = CarInformation; *lpCommaLocation != '\0'; lpCommaLocation++ )
{
if ( *lpCommaLocation == ',' )
{
break;
}
}
*lpCommaLocation = '\0';

TCARINFORMATION carinfo = { NULL }; // 存儲本次用戶輸入的車輛信息

strcpy( carinfo.RegistrationMark, CarInformation );

if ( CommandType == 'A' )
{
strcpy( carinfo.ArrivalTime, lpCommaLocation + 1 );

if ( FALSE == IsStackFull( lpCarStack ) )
{
strcpy( carinfo.EntranceTime, carinfo.ArrivalTime );
Push( lpCarStack, carinfo );
printf( "已進入停車場第 %d 個車位\n",
lpCarStack->Top + 1
);
printf( "車牌號:\t\t%s\n", carinfo.RegistrationMark );
printf( "進入時間:\t%s\n", carinfo.EntranceTime );
puts( "是否收費:\t是" );
}
else
{
EnQueue( lpCarQueue, carinfo );
printf( "停車場已滿,已停放在便道的第 %d 個車位\n",
lpCarQueue->EffectiveSize
);
printf( "車牌號:\t\t%s\n", carinfo.RegistrationMark );
printf( "停放時間:\t%s\n", carinfo.ArrivalTime );
puts( "是否收費:\t否" );
}
}
else if ( CommandType == 'D' )
{
strcpy( carinfo.DepartureTime, lpCommaLocation + 1 );

LPTCARSTACK lpTempCarStack = NULL;
InitStack( lpTempCarStack, ParkCapability );

TCARINFORMATION carinfoOut = { NULL };

BOOL bIsCarFound = FALSE;
while ( FALSE == IsStackEmpty( lpCarStack ) )
{
Pop( lpCarStack, carinfoOut );
if ( 0 != strcmp( carinfoOut.RegistrationMark, carinfo.RegistrationMark ) )
{
Push( lpTempCarStack, carinfoOut );
}
else
{
bIsCarFound = TRUE;
break;
}
}

while ( FALSE == IsStackEmpty( lpTempCarStack ) )
{
TCARINFORMATION tempcarinfo = { NULL };
Pop( lpTempCarStack, tempcarinfo );
Push( lpCarStack, tempcarinfo );
}

if ( FALSE == bIsCarFound )
{
printf( "車牌號為 %s 的車未進入停車場或不需要交費.\n", carinfo.RegistrationMark );
Pause( "--------------------\n按任意鍵輸入下一條信息...\n" );
continue;
}

strcpy( carinfoOut.DepartureTime, carinfo.DepartureTime );
int EntranceTime = ConvertTimeFormat( carinfoOut.EntranceTime );
int DepartureTime = ConvertTimeFormat( carinfoOut.DepartureTime );
int ContinuanceMinutes = DepartureTime - EntranceTime;
if( ContinuanceMinutes>0)
{ printf( "計費時段:\t%s - %s (共 %d 分鍾)\n",
carinfoOut.EntranceTime,
carinfoOut.DepartureTime,
ContinuanceMinutes
);

double Expense = CalculateExpense( ContinuanceMinutes );
printf( "應交納的費用:\t%.1lf 元\n", Expense );

if ( FALSE == IsQueueEmpty( lpCarQueue ) )
{
TCARINFORMATION tempcarinfo = { NULL };
DeQueue( lpCarQueue, tempcarinfo );
strcpy( tempcarinfo.EntranceTime, carinfoOut.DepartureTime );
Push( lpCarStack, tempcarinfo );
puts( "--------------------" );
printf( "停放在便道的第 1 個車位,車牌號為 %s 的車已進入停車場\n",
tempcarinfo.RegistrationMark
);
}
}
else{
printf( "離開時間錯誤,需要正確的時間!\n" );
}
}

else if ( CommandType == 'G' )
{
ClearScreen();
putchar( '\n' );
puts( "[停車場使用情況]\n" );
puts( "[車位]\t[車牌號]\t[到達時間]\t[進入(開始計費)時間]\n");
for ( int i = 0; i <= lpCarStack->Top; i++ )
{
printf( "%d\t%s\t\t%s\t\t%s\n",
i + 1,
lpCarStack->lpCarInformation[i].RegistrationMark,
lpCarStack->lpCarInformation[i].ArrivalTime,
lpCarStack->lpCarInformation[i].EntranceTime
);
}
putchar( '\n' );
putchar( '\n' );
putchar( '\n' );
puts( "[便道使用情況]\n" );
puts( "[車位]\t[車牌號]\t[到達時間]\t[進入(開始計費)時間]\n");
int Num = 0;
for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead->lpNext;
lpCarNode != NULL; lpCarNode = lpCarNode->lpNext )
{
Num++;
printf( "%d\t%s\t\t%s\t\t%s\n",
Num,
lpCarNode->carinfo.RegistrationMark,
lpCarNode->carinfo.ArrivalTime,
lpCarNode->carinfo.EntranceTime
);
}
putchar( '\n' );
}
else if ( CommandType == 'E' )
{
break;
}
else
{
puts( "輸入信息有誤.第一個字元只能為 'A' 或 'D' 或 'G' 或'E' (注意區分大小寫)." );
}
Pause( "--------------------\n按任意鍵輸入下一條信息.\n" );
} while ( TRUE );

DestroyStack( lpCarStack );
DestroyQueue( lpCarQueue );

Pause( "\n按任意鍵退出程序...\n" );

return 0;
}

『柒』 C語言中怎麼寫,匯編後才會有push 入棧

用嵌入匯編方式就可很方便的用匯編語句,只是要注意順序喲,否則會讓你得到意想不到的亂飛。

『捌』 用C語言實現棧的操作,包括創建空棧,PUSH,和POP。用標准C,就是能在TC上運行的。

#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef char SElemtype;
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;

int InitStack(SqStack &S);
int Push(SqStack &S, SElemtype e);
int GetTop(SqStack S, SElemtype &e);
int Pop(SqStack &S, SElemtype &e);

int main()
{
SElemtype e, f = 0, g = 0;
int c;

SqStack S;
if (!InitStack(S))
return 0;

printf("棧已初始化好,輸入一個數據入棧.\n");
scanf("%c", &e);
if (!Push(S, e))
return 0;

if (!GetTop(S, f))
return 0;
printf("棧頂元素是:%c\n", f);

if (!Pop(S, g))
return 0;
printf("棧頂元素出棧,它是:%c\n", g);

scanf("%d", &c);
return 1;
}

int InitStack(SqStack &S)
{
S.base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof (SElemtype));
if (!S.base)
return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}

int Push(SqStack &S, SElemtype e)
{
if (S.top - S.base == S.stacksize)
{
S.base = (SElemtype *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof (SElemtype));
if (!S.base)
return 0;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 1;
}

int GetTop(SqStack S, SElemtype &e)
{
if (S.top == S.base)
return 0;
e = *(S.top - 1);
return 1;
}

int Pop(SqStack &S, SElemtype &e)
{
if (S.top == S.base)
return 0;
e = *--S.top;
return 1;
}

我學這本書時寫的,剛好給你。

針對補充問題:
&不是偽代碼,是C++的傳引用,你看的那本書上都是這樣用的。
樓上的順序棧實質就是一個數組。。
TC不能建C++項目嗎? 不能的話你還是裝個VC吧,你若聽了老師的話就應該知道在這里傳引用是什麼意思,且看下面:
int InitStack(SqStack &S);
int Push(SqStack &S, SElemtype e);
int GetTop(SqStack S, SElemtype &e);
int Pop(SqStack &S, SElemtype &e);
有沒有發現GetTop()的參數沒有使用&S,因為它對S只讀,不改變S。
如果不使用傳引用的話,那麼InitStack(),Push()等將要返回一個S,若要保存還要把它賦給另一個SqStack類型的變數S1,這樣做浪費時間還浪費空間,且之前的S也就沒用了,如果反復地調用Push()的話,這樣的浪費可想而知。
所以,為了節省時間跟空間,以及按大多數情況下的需要,我們還是得始終只用一個S保存我們要的數據。
至於傳引用是什麼意思,跟指針有點像,你若不想翻書就再補充問題吧。。