【NEFU锐格】数据结构实验二

文章目录

  • 8563
  • 8562
  • 8566
  • 8569
  • 8564
  • 8564
  • 8568

1.8563 顺序栈的实现

#include 
using namespace std;
#define maxsize 100
typedef struct{
    int *base;
    int *top;
    int msize;
}Stack;
void init(Stack &a){
    a.base=new int[100];
    a.top=a.base;
    a.msize=maxsize;
}
void push(Stack &a,int e){
    *a.top++=e;
}
void pop(Stack &a){
    *a.top--;
}
void top(Stack a){
    cout<<*(a.top-1)<<' ';
}
int main()
{
    Stack a;
    init(a);
    int e;
    while(cin>>e){
        if(e==0) break;
        push(a,e);
    }
    while(a.base!=a.top){
       top(a);
       pop(a);
    }
    return 0;
}

2.8562 链式栈的实现

#include 
using namespace std;
typedef struct node{
    int data;
    struct node *next;
}Stacklist;
void init(Stacklist* &a){
    a=NULL;
}
void push(Stacklist* &a,int n){
    Stacklist *p;
    p=new Stacklist;
    p->data=n;
    p->next=a;
    a=p;
}
void pop(Stacklist* &a){
    a=a->next;
}
void top(Stacklist* a){
    cout<data<<' ';
}
int main()
{
    Stacklist *a;
    init(a);
    int n;
    while(cin>>n){
        if(n==0) break;
        push(a,n);
    }
    while(a){
        top(a);
        pop(a);
    }
    return 0;
}
  

3.8566 利用栈进制转换

#include
using namespace std;

typedef struct node{
    int data;
    struct node *next;
}Node,*Linklist;
void ruzhan(Linklist &H,int x,int k){
    Node *p; 
    int e,m;
    while(x!=0){
        e=x%k;
        m=x/k;
        p=new Node;
        p->data=e;
        p->next=H;
        H=p;
        x=m;
    } 
        p=new Node;
        p->data=e;
        p->next=H;
        H=p;
}
void out(Linklist &H){
    Node *p; 
    p=H->next;
    while(p!=NULL){
        cout<data;
        p=p->next;
    }
}
int main(){
    Linklist H;
    H=new node;
    H=NULL;
    int x,k,m;
    cin>>x>>k;
    m=k;
    ruzhan(H,x,k);
    cout<

4.8569 利用栈表达式求值

#include 
using namespace std;
int cuclt(int x,int y,char c)
{
    int r=0;
    if(c=='*') {r=x*y;}
    else if(c=='/'){
        r=x/y;
    }
    else if(c=='+'){
        r=x+y;
    }
    else if(c=='-'){
        r=x-y;
    }
    return r;
}
int main()
{
    stack s1;
    stack s2;
    map m;
    m['+']=1;
    m['-']=1;
    m['*']=2;
    m['/']=2;
    m['(']=0;
    char b[100];
   cin>>b;
int    i=0;
    while(b[i]!='#')
    {
        if(b[i]>='0'&&b[i]<='9'){
            int num=0;
                num=num*10+b[i]-'0';
                i++;    
            s1.push(num);
        }
        else{
            if(b[i]=='(') {s2.push(b[i]);}
        else if(b[i]==')'){
            while(s2.top()!='('){
                int t=s2.top();s2.pop();
                int x=s1.top();s1.pop();
                int y=s1.top();s1.pop();
                s1.push(cuclt(y,x,t));
            }
            s2.pop();
}
        else{
            while(s2.size()>0&&m[s2.top()]>=m[b[i]]){
                int t=s2.top();s2.pop();
                int x=s1.top();s1.pop();
                int y=s1.top();s1.pop();
                s1.push(cuclt(y,x,t));
            }
            s2.push(b[i]);
        }
        i++;
}
    }
    while(s2.size()){
            int t=s2.top();s2.pop();
            int x=s1.top();s1.pop();
            int y=s1.top();s1.pop();
            s1.push(cuclt(y,x,t));
    }
    cout<

5.8564 链式队列

#include 
#define maxsize 100
using namespace std;
typedef struct node{
    int data;
    struct node *next;
}*LinkQNode,LQNode;
typedef struct{
    LinkQNode front;
    LinkQNode rear;
}*LinkQueue,LQueue;
void init(LinkQueue &a)
{
    LinkQNode p;
    a=(LinkQueue)malloc(sizeof(LQueue));
    p=(LinkQNode)malloc(sizeof(LQNode));
    p->next=NULL;
    a->front=a->rear=p;
}
void push(LinkQueue &a,int e){
    LinkQNode p;
    p=(LinkQNode)malloc(sizeof(LQNode));
    p->data=e;
    p->next=NULL;
    a->rear->next=p;
    a->rear=p;
}
void pop(LinkQueue &a,int &x){
   LinkQNode p=a->front->next;
    a->front->next=p->next;
    x=p->data;
    if(a->rear==p) a->rear=a->front;
}
int main()
{
    int x;
    LinkQueue a;
    init(a);
    int n;
    while(cin>>n){
        if(n==0) break;
         push(a,n);
    }
    while(a->front!=a->rear){
        //top(a);
        pop(a,x);
        cout<

6.8565  顺序队列

#include 
using namespace std;
#define MAXSIZE 1024
typedef struct{
    int data[MAXSIZE];
    int rear,front;
}Queue,*Lqueue;
void initqueue(Queue &a)
{
    a.rear=a.front=0;
}
void push(Queue &a,int x)
{
    a.data[a.rear]=x;
    a.rear=(a.rear+1)%MAXSIZE;
} 
void pop(Queue &a,int &x)
{
    x=a.data[a.front];
    a.front=(a.front)+1;
}
int main()
{
    Queue a;
    initqueue(a);
    int u,i;
    while(cin>>u){
        if(u==0) break;
        push(a,u);
    }
    while(a.front!=a.rear){
        pop(a,i);
        cout<

7.8568(无括号形式要求)杨辉三角

#include 
using namespace std;
#define MAXSIZE 1024
typedef struct{
    int data[MAXSIZE];
    int rear,front;
}Queue,*Lqueue;
void initqueue(Queue &a)
{
    a.rear=a.front=0;
}
void push(Queue &a,int x)
{
    a.data[a.rear]=x;
    a.rear=(a.rear+1)%MAXSIZE;
} 
void pop(Queue &a)
{
    a.front=(a.front)+1;
}
int top(Queue &a)
{
    int x=a.data[a.front];
    return x;
}
int main()
{
    Queue a;
    initqueue(a);
    int n;
    cin>>n;
    push(a,1);
       
    for(int i=1;i<=n;i++)
    {
        int u=0;
        for(int j=1;j<=i;j++){
            int o=top(a);
            cout<

你可能感兴趣的:(链表,数据结构)