数据结构顺序栈的C语言实现(入栈,初始化栈,出栈,取栈顶操作)【C语言环境下可以直接运行】

C语言实现顺序栈的(入栈,初始化栈,出栈,取栈顶操作)|C语言数据结构【C语言环境下可以直接运行】
这个程序可以运行的,虽然比较简单,但是是可以直接运行的。

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define Maxsize 10//最大个数
typedef int Elemtype;

typedef struct {
    Elemtype data[Maxsize];
    int top;
}Sqstack;

void Initstack();
void Push();
void Pop();
void Gettop();
void Pushtostack();
void Popfromstack();

int main()
{
    Sqstack h;
    Sqstack * s;
    int choice;
    s=&h;
    Initstack(s);

    while(1){
      printf("********1.入栈          2.出栈*********\n");
      printf("********3.取栈顶元素    4.退出*********\n");
      printf("请选择需要进行的操作:\n");
      scanf("%d",&choice);
      switch(choice)
          {
          case 1:Pushtostack(s);break;
          case 2:Popfromstack(s);break;
          case 3:Gettop(s);break;
          case 4:exit(0);break;
          default:printf("输入错误!!!\n");
          }
    }
    return 0;
}

void Initstack(Sqstack *S){
    S->top=-1;
}//初始化栈

void Push(Sqstack *S,Elemtype x){//入栈操作
    if(S->top==Maxsize)
        printf("栈已满,入栈失败!\n");
    else{(S->top)++;
    S->data[S->top] = x ;
    printf("输入的元素(%d)入栈成功!\n",x);}
}

void Pop(Sqstack *S){//出栈操作
    Elemtype *x;
    if(S->top==-1)
        printf("此栈为空,错误\n");
    else{x=&(S->data[S->top]);
    S->top = S->top - 1;
    printf("%d出栈成功!\n",*x);
    }
}

void Gettop(Sqstack *S){//获取栈顶元素
    Elemtype *x;
    if(S->top<=-1)
        printf("此栈为空!没有栈顶元素\n");
    else{
        x=&(S->data[S->top]);
        printf("栈顶元素的值为%d\n",*x);
    }
}

void Pushtostack(Sqstack *s){//主函数中的压栈
    int n;
    Elemtype e;
    printf("请输入入栈元素个数(大于1):\n");
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        printf("请输入第%d个元素的值:\n",i+1);
        scanf("%d",&e);
        Push(s,e);
    }
}

void Popfromstack(Sqstack *s){//主函数中的出栈
	int n;
    printf("请输入出栈元素个数(大于1):\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
        Pop(s);
	}
}




遇到的一些问题:指针越界,指针的加法表示的内容,初始化问题。
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如:
  例:
  1、char a[20];
  2、int *ptr = a;
  …
 …
  3、ptr++;

在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字节做单位的,故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。
由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0号单元开始的四个字节,此时指向了数组a中从第4号单元开始的四个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值