关于数据结构栈的问题,急求大神回复,谢谢

const int StackSize = 10;
class Stack
{
public:
Stack(){top = -1;}//构造函数,初始化一个空栈
~Stack(){}//析构函数为空
void Push(char x);//入栈操作,将元素x
//入栈
char Pop();//出栈操作,将栈顶元素弹出
char GetTop();//取栈顶元素(不删除)
char Empty();//判断栈是否为空
char Emp();//清空栈
protected:
char data[StackSize];//存放栈元素的数组
int top;//栈顶指针,为栈顶元素在数组中的下标
};

上面这个是我们学的数据结构,下面的代码是网上的代码,而且大家都这么写,我看不太懂,想请求帮助
template
class Stack
{
public:
Stack(int MaxStackSize=10);
~Stack(){delete []stack;}
bool IsEmpty()const {return top==-1;}
bool IsFull()const {return top==MaxTop;}
T Top()const;
Stack& Add(const T& x);
Stack& Delete(T& x);
int Length(){return top+1;}
void Output(ostream& out) const;
Stack& Divide(Stack& x);
Stack& Merge(Stack& x);
friend istream& operator>>(istream& in,Stack& x);
private:
int top;
int MaxTop;
T *stack;

};为什么要这么写

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言链表是通过指针实现的数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用于存储任意类型的数据结构,包括一元多项式。 在用单链表存储一元多项式时,每个节点可以表示一个项,包含两个元素:系数和指数。链表的头节点可以表示多项式本身,包含一个指向第一个项的指针。 实现一元多项式计算时,可以通过遍历链表,将相同次数的项合并,得到新的多项式。具体实现可以使用循环或递归算法,遍历链表并进行计算。 以下是一个简单的单链表实现一元多项式计算的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义一元多项式项的结构体 typedef struct node { float coef; // 系数 int exp; // 指数 struct node* next; // 指向下一个节点的指针 } Term; // 定义一元多项式的结构体 typedef struct { Term* head; // 指向第一个项的指针 } Polynomial; // 创建一元多项式 Polynomial create_polynomial() { Polynomial poly; poly.head = NULL; return poly; } // 在一元多项式中插入一项 void insert_term(Polynomial* poly, float coef, int exp) { Term* term = (Term*)malloc(sizeof(Term)); term->coef = coef; term->exp = exp; term->next = NULL; if (poly->head == NULL) { poly->head = term; } else { Term* p = poly->head; while (p->next != NULL) { p = p->next; } p->next = term; } } // 遍历一元多项式并打印 void print_polynomial(Polynomial poly) { Term* p = poly.head; while (p != NULL) { printf("%.2fx^%d ", p->coef, p->exp); if (p->next != NULL) { printf("+ "); } p = p->next; } printf("\n"); } // 计算一元多项式的值 float evaluate_polynomial(Polynomial poly, float x) { float result = 0; Term* p = poly.head; while (p != NULL) { result += p->coef * pow(x, p->exp); p = p->next; } return result; } // 合并一元多项式 Polynomial merge_polynomial(Polynomial poly1, Polynomial poly2) { Polynomial result = create_polynomial(); Term *p1 = poly1.head, *p2 = poly2.head; while (p1 != NULL && p2 != NULL) { if (p1->exp > p2->exp) { insert_term(&result, p1->coef, p1->exp); p1 = p1->next; } else if (p1->exp < p2->exp) { insert_term(&result, p2->coef, p2->exp); p2 = p2->next; } else { insert_term(&result, p1->coef + p2->coef, p1->exp); p1 = p1->next; p2 = p2->next; } } while (p1 != NULL) { insert_term(&result, p1->coef, p1->exp); p1 = p1->next; } while (p2 != NULL) { insert_term(&result, p2->coef, p2->exp); p2 = p2->next; } return result; } int main() { Polynomial poly1 = create_polynomial(); insert_term(&poly1, 2, 3); insert_term(&poly1, -3, 2); insert_term(&poly1, 1, 0); printf("Poly1: "); print_polynomial(poly1); Polynomial poly2 = create_polynomial(); insert_term(&poly2, -4, 3); insert_term(&poly2, 3, 1); insert_term(&poly2, 2, 0); printf("Poly2: "); print_polynomial(poly2); Polynomial poly3 = merge_polynomial(poly1, poly2); printf("Poly3: "); print_polynomial(poly3); float result = evaluate_polynomial(poly3, 2); printf("Result: %.2f\n", result); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值