数据结构remake第三天
栈和串
栈的基本操作
#include <stdio.h>
#include <stdlib.h>
typedef int SElemType;
typedef struct SeqStack
{
SElemType *data;
int maxlen;
int top;
}SeqStack;
SeqStack * InitStack(int maxl)
{
SeqStack *s = (SeqStack*)malloc(sizeof(*s));
s->data = (int*)(malloc(sizeof(SElemType)* maxl));
s->top = -1;
s->maxlen = maxl;
return s;
}
void DestoryStack(SeqStack*s)
{
if(s==NULL)
return ;
free(s->data);
free(s);
}
void ClearStack(SeqStack*s)
{
if(s==NULL)
return ;
s->top=-1;
}
int StackisEmpty(SeqStack*s)
{
if(s==NULL ||s->top ==-1 )
{
return 1;
}
return 0;
}
int Stacklength(SeqStack *s)
{
if(s==NULL)
{
return 0;
}
return s->top +1;
}
int Push(SeqStack *s ,SElemType x)
{
if(s==NULL ||s->top == s->maxlen -1)
{
return 0;
}
s->data[++s->top]=x;
if(s->top==s->maxlen -1)
return 0;
else
return 1;
}
int Pop(SeqStack *s,SElemType *e)
{
if(s==NULL || s->top == -1)
{
return 0;
}
*e = s->data[s->top--];//3
if(s->top == -1)
return 0;
else
return 1;
}
int GetTop(SeqStack *s,SElemType *e)
{
if(s==NULL || s->top == -1)
{
return 0;
}
*e = s->data[s->top];
return 1;
}
int main()
{
int n,m=1;
int x;
scanf("%d",&n);
SeqStack *s= InitStack(n);
while(m)
{
scanf("%d",&x);
m=Push(s,x);
}
//
// m=1;
// while(m)
// {
// int a=0;
// m=Pop(s,&a);
// printf("%d ",a);
// }
//
// printf("\n");
//
// ClearStack(s);
// m=StackisEmpty(s);
//
// if(m==1)
// printf("栈已清空!\n");
return 0;
}
串/KMP
//
// fakeKMP.cpp
// dataStructure
//
// Created by noobwei on 2023/3/25.
//
#include <stdio.h>
void get_next(char T[],int *next){
int i,k;
i=1;k=0;
next[1]=0;
while(i<T[0]){
if(k==0||T[i]==T[k]){
++i;
++k;
next[i]=k;
}
else{
k=next[k];
}
}
}
int Index_KMP(char S[],char T[],int pos){
int i=pos;
int j=1;
int next[255];
get_next(T, next);
while(i<=S[0]&&j<=T[0]){
if(j==0||S[i]==T[j]){
++i;
++j;
}
else{
j=next[j];
}
}
if(j>T[0]){
return i-T[0];
}
else{
return 0;
}
}
标签:SeqStack,return,int,top,20230325,SElemType,NULL
From: https://www.cnblogs.com/noobwei/p/17255111.html