今天给各位分享栈和队列c语言代码的知识,其中也会对元素进栈的c语言代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、《线性表的插入和删除算法实现》以及《栈和队列的插入和删除算法实现》的c语言代码2、c语言实现队列和栈的方法3、c语言堆栈和队列4、回文(栈和队列)(C语言)
《线性表的插入和删除算法实现》以及《栈和队列的插入和删除算法实现》的c语言代码
链表
#include”stdio.h”
#include”malloc.h”
typedef struct node
{
int data;
struct node *next;
}node,*linklist;
int initlist(linklist l)
{
linklist q,p;
int i,n;
q=l;
printf(“请输入链表长度:”);
scanf(“%d”,n);
for(i=0;in;i++)
{
p=(linklist )malloc(sizeof(node));
printf(“请输入链表数字:”);
scanf(“%d”,p-data);
q-next=p;
q=p;
}
q-next=NULL;
return 1;
}
int printflink(linklist l)
{
linklist p;
p=l-next;
while(p!=NULL)
{
printf(“%d\n”,p-data);
p=p-next;
}
return 1;
}
int insertlink(linklist l)
{
linklist p,s;
int j=0,i,n;
p=l;
printf(“请输入你要插入的位置:”);
scanf(“%d”,i);
printf(“请输入插入的数字:”);
scanf(“%d”,n);
while(p-next!=NULLji-1)
{
p=p-next;
j++;
}
if(!(p-next)||ji-1)
{
printf(“error\n”);
return 1;
}
s=(linklist)malloc(sizeof(node));
s-data=n;
s-next=p-next;
p-next=s;
return 1;
}
int deletelink(linklist l)
{
linklist p,q;
int j=0,e,i;
p=l;
printf(“请输入你要删除的位置:”);
scanf(“%d”,i);
while(p-next!=NULLji-1)
{
p=p-next;
j++;
}
if(!(p-next)||ji-1)
{
printf(“error\n”);
return 1;
}
q=p-next;
p-next=q-next;
free(q);
return 1;
}
int main()
{
linklist l;
l=(linklist)malloc(sizeof(node));
l-next=NULL;
initlist(l);
printflink(l);
insertlink(l);
printflink(l);
deletelink(l);
printflink(l);
return 1;
}
栈
#include”iostream.h”
#include”stdio.h”
#include”malloc.h”
typedef int elementype;
#define MAXSTACK 100
typedef struct stack
{
elementype *base;
elementype *top;
int stacksize;
}stack;
//建栈
int initstack(stack *p)
{
p-base=(elementype *)malloc(MAXSTACK*sizeof(elementype));
if(!p-base)
{
cout”建立栈失败!”endl;
return 1;
}
p-top=p-base;
return 1;
}
//元素进栈
int pushstack(stack *p)
{
elementype e;
if(p-top-p-base=p-stacksize)
{
cout”栈已满!”endl;
return 1;
}
cout”请输入进栈元素:”;
cine;
*p-top=e;
p-top++;
return 1;
}
//删除栈顶元素
int deletetop(stack *p)
{
if(p-top==p-base)
{
cout”栈为空”endl;
return 1;
}
p-top–;
return 1;
}
//显示栈中元素
int displaystack(stack *p)
{
int i=0;
elementype *s;
if(p-top==p-base)
{
cout”栈为空!”endl;
return 1;
}
s=p-base;
for(i=0;ip-top-p-base;i++)
{
cout*s” “;
s++;
}
coutendl;
return 1;
}
int main()
{
stack *p;
int a;
initstack(p);
displaystack(p);
pushstack(p);
displaystack(p);
deletetop(p);
displaystack(p);
}
队列
#include”stdio.h”
#include”malloc.h”
typedef struct lnode
{
int data;
struct lnode *next;
}lnode;
typedef struct linkque
{
lnode *front;
lnode *rear;
}linkque;
int queinit(linkque *q)
{
int e;
lnode *p;
q-front=(lnode *)malloc(sizeof(lnode));
q-rear=q-front;
q-front-next=NULL;
while(1)
{
printf(“请输入队列数字(输入0结束):”);
scanf(“%d”,e);
if(e==0) break;
p=(lnode *)malloc(sizeof(lnode));
p-data=e;
p-next=NULL;
q-rear-next=p;
q-rear=p;
}
return 1;
}
int quein(linkque *q)
{
lnode *p;
int e;
printf(“请输入你要插入队列的数字:”);
scanf(“%d”,e);
p=(lnode *)malloc(sizeof(lnode));
p-data=e;
p-next=NULL;
q-rear-next=p;
q-rear=p;
return 1;
}
int quedel(linkque *q)
{
lnode *p;
int e;
p=q-front-next;
e=p-data;
q-front-next=p-next;
free(p);
return e;
}
int printfque(linkque *q)
{
lnode *p;
p=q-front-next;
while(p)
{
printf(“%d\t”,p-data);
p=p-next;
}
printf(“\n”);
}
int main()
{
linkque q;
queinit(q);
printfque(q);
quein(q);
printfque(q);
quedel(q);
printf(“队列出列后为:\n”);
printfque(q);
return 1;
}
c语言实现队列和栈的方法
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define N 20
typedef char SElemType;
typedef int Status;typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;#includestdio.h
#includestdlib.hStatus CreatStack(SqStack S){
//创建栈
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//CreatStackStatus Push(SqStack S,SElemType e){
//插入e为新的栈顶元素
if(S.top-S.base=S.stacksize){//栈满,追加存储空间
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit (OVERFLOW);//存储空间分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//PushStatus Pop(SqStack S ,SElemType e){
//若栈不空,删除栈顶元素,并用e返回其值
if(S.top==S.base) return ERROR;
e=*–S.top;
return OK;
}//Pop typedef char QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QNodePtr;typedef struct{
QNodePtr front;
QNodePtr rear;
}LinkQueue;Status CreatQueue(LinkQueue Q){
//建立一个空的链式栈
Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode));
if(!Q.front)exit(OVERFLOW);
Q.front-next=NULL;
return OK;
}Status EnQueue(LinkQueue Q,QElemType e){ QNodePtr p;
p=(QNodePtr)malloc(sizeof(QNode));
if(!p)exit(OVERFLOW);
p-data=e;p-next=NULL;
Q.rear-next=p;
Q.rear=p;
return OK;
}Status DeQueue(LinkQueue Q,QElemType e){QNodePtr p;brif(Q.front==Q.rear) return ERROR;brp=Q.front-next; e=p-data;brQ.front-next=p-next;brif(Q.rear==p) Q.rear=Q.front;brfree(p);brreturn OK;br}int stackPalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{
printf(“栈练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n”);
SqStack S;
CreatStack(S);
char c;
SElemType a;
SElemType b[N];
int count = 0;
fgets( b, N, stdin );
while((b[count])!=’#’)
{
Push(S,b[count]); //进栈
count++;
}
int i = 0;
while(i count)
{
Pop(S,a);
if(a!=b[i])
return ERROR;
i++;
}
return OK;}//stackPalindrom_Test int queuePalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{
printf(“队列练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n”);
LinkQueue Q;
CreatQueue(Q); char c;
SElemType a;
SElemType b[N];
int count = 0;
fgets( b, N, stdin );
while((b[count])!=’#’)
{
EnQueue(Q,b[count]);; //入列
count++;
} while(count– 0)
{
DeQueue(Q,a);
if(a!=b[count])
return ERROR;
}
return OK;
}//queuePalindrom_Test Status main(){ if(stackPalindrom_Test()==1)
printf(“是回文\n”);
else printf(“不是回文\n”); if(queuePalindrom_Test()==1)
printf(“是回文\n”);
else printf(“不是回文\n”);
return OK;
}
c语言堆栈和队列
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
以上是从数据结构角度来看,从操作系统角度来看,所有的数据结构都是对虚拟内存的操作,堆是堆,栈是栈,栈指的是C语言函数所使用的自动有函数回收的虚拟内存空间,而堆则有操作系统堆管理器来管理的那部分虚拟内存,从C语言角度来看,使用malloc函数动态分配的内存,就是堆内存。
回文(栈和队列)(C语言)
#include stdio.h
void main( )
{
char str[100], queue[100], stack[100], top = -1, front = 0, rear = 0, i;
int IsHuiwen = 1;
gets(str);
for(i = 0; str[i] != ‘\0’; i++)
{
queue[rear++] = str[i];
stack[++top] = str[i];
}
while(top !== -1 IsHuiwen)
{
if(stack[top–] != queue[front++])
IsHuiwen = 0;
}
if(IsHuiwen) printf(“yes!\n);
else printf(“no!\n);
}
栈和队列c语言代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于元素进栈的c语言代码、栈和队列c语言代码的信息别忘了在本站进行查找喔。