IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> SDUT OJ----数据结构----栈与队列习题 -> 正文阅读

[数据结构与算法]SDUT OJ----数据结构----栈与队列习题

A - 数据结构实验之栈与队列一:进制转换

Description

输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出。

Input

第一行输入需要转换的十进制非负整数;
第二行输入 R。

Output

输出转换所得的 R 进制数。

Sample

Input?

1279
8

Output?

2377

顺序栈方法

#include<stdio.h>
#include<stdlib.h>
#define N 100

typedef struct 
{
	int *base;
	int *top;
	int len;
}stack;

stack initstack()
{
	stack s;
	s.top=(int *)malloc(N * sizeof(int));
	s.base=s.top;
	s.len=0;
	return s;
}

int pop(stack *s)
{
	int e;
	e=*(s->top-1);
	s->top--;
	s->len--;
	return e;
}

void push(stack *s,int x)
{
	*(s->top)=x;
	s->top++;
	s->len++;
}

int main()
{
	int n,m;
	stack s;
	scanf("%d %d",&n,&m);
	s=initstack();
	if(n==0)
	{
		push(&s,n);
	}
	while(n)
	{
		push(&s,n%m);
		n/=m;
	}
	while(s.len)
	{
		printf("%d",pop(&s));
	}
	return 0;
}

链栈方法

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
	int data;
	Node *next;
}node;

typedef struct Stack 
{
	node *top;
	node *base;
}stack;

node *creatnode()
{
	node *p;
	p=(node *)malloc(sizeof(node));
	p->next=NULL;
	return p;
}

stack *creatstack()
{
	stack *p;
	p=(stack *)malloc(sizeof(stack));
	p->top=creatnode();
	p->base=p->top;
	return p;
}

int pop(stack *p)
{
	int n;
	node *t;
	n=p->top->next->data;
	t=p->top->next;
	p->top->next=p->top->next->next;
	free(t);
	return n;
}

void push(stack *p,int n)
{
	node *t;
	t=creatnode();
	t->data=n;
	t->next=p->top->next;
	p->top->next=t;
}

void print(stack *p)
{
	while(p->top->next)
	{
		printf("%d",pop(p));
	}
}
int main()
{
	int n,m;
	stack *t;
	t =creatstack();
	scanf("%d %d",&n,&m);
	if(n==0)
	{
		push(t,n);
	}
	while(n)
	{
		push(t,n%m);
		n/=m;
	}
	print(t);
	return 0;
}

B - 数据结构实验之栈与队列二:一般算术表达式转换成后缀式

Description

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input

输入一个算术表达式,以‘#’字符作为结束标志。

Output

输出该表达式转换所得到的后缀式。

Sample

Input?

a*b+(c-d/e)*f#

Output?

ab*cde/-f*+

?链栈

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
	char data;
	Node *next;
}node;

typedef struct Stack
{
    node *top;
    node *base;
}stack;

node *creatnode()
{
	node *p;
	p=(node *)malloc(sizeof(node));
	p->next=NULL;
	return p;
}

stack *creatstack()
{
	stack *s;
	s=(stack *)malloc(sizeof(stack));
	s->top=creatnode();
	s->base=s->top;
	return s;
}

void pop(stack *p)
{
	node *t;
    t=p->top->next;
    p->top->next=p->top->next->next;
    free(t);
}

char top(stack *p)
{
	char t;
	t=p->top->next->data;
	return t;
}

void push(stack *p,char n)
{
	node *t;
	t=creatnode();
	t->data=n;
	t->next=p->top->next;
	p->top->next=t;
	p->base=t;
}

int empty(Stack *t)
{
    if(t->top->next==NULL)
    {
        return 0;
    }
    return 1;
}

void print(stack *p)
{
	while(empty(p))
    {
    	printf("%c",top(p));
    	pop(p);
	}
}

int main()
{
    stack *t;
    char s[1000];
    scanf("%s",s);
    t = creatstack();
    for(int i=0;s[i]!='#';i++)
    {
        if(s[i]=='(')
            push(t,s[i]);
        else if(s[i]==')')
        {
            while(top(t)!='(')
            {
                printf("%c",top(t));
                pop(t);
            }
            pop(t);
        }
		else if(s[i] == '+' || s[i] == '-')
        {
           
            if(!empty(t) || top(t) == '(')
            {
            	push(t,s[i]);
            }
            else
            {
        	    printf("%c",top(t));
         	    pop(t);
         	    push(t,s[i]);
            }
        }
        else if(s[i] == '*' || s[i] == '/')
        {
            
      		if(!empty(t)|| top(t) == '(' || top(t) == '+' || top(t) == '-')
       	    {
       		    push(t,s[i]);
           	}
           	else
           	{
            	printf("%c",top(t));
            	pop(t);
            }
        }
        else
        {
            printf("%c",s[i]);
        }
    }
    print(t);
    return 0;
}

顺序栈

#include<stdio.h>
#include<stdlib.h>

typedef struct Stack
{
    char *top;
    char *base;
	char len;
}stack;

stack creatstack()
{
	stack s;
	s.top=(char *)malloc(100000 * sizeof(char));
	s.base=s.top;
	s.len=0;
	return s;
}

void pop(stack *p)
{
	p->top--;
	p->len--;
}

char top(stack p)
{
	return *(p.top-1);
}

void push(stack *p,char n)
{
	*(p->top)=n;
	p->top++;
	p->len++;
}

int empty(stack t)
{
    if(!t.len)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

void print(stack p)
{
	while(empty(p))
    {
    	printf("%c",top(p));
    	pop(&p);
	}
}

int main()
{
    stack t;
    char s[1000];
    scanf("%s",s);
    t = creatstack();
    for(int i=0;s[i]!='#';i++)
    {
        if(s[i]=='(')
            push(&t,s[i]);
        else if(s[i]==')')
        {
            while(top(t)!='(')
            {
                printf("%c",top(t));
                pop(&t);
            }
            pop(&t);
        }
		else if(s[i] == '+' || s[i] == '-')
        {
           
            if(!empty(t) || top(t) == '(')
            {
            	push(&t,s[i]);
            }
            else
            {
        	    printf("%c",top(t));
         	    pop(&t);
         	    push(&t,s[i]);
            }
        }
        else if(s[i] == '*' || s[i] == '/')
        {
            
      		if(!empty(t)|| top(t) == '(' || top(t) == '+' || top(t) == '-')
       	    {
       		    push(&t,s[i]);
           	}
           	else
           	{
            	printf("%c",top(t));
            	pop(&t);
            }
        }
        else
        {
            printf("%c",s[i]);
        }
    }
    print(t);
    return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 00:18:38  更:2021-07-28 00:18:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:22:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码