1.用一单链表L实现一个栈,要求PUSH和POP操作的时间仍为O(1).
入栈操作相当于插入操作。出栈相当于删除操作。代码如下:
//时间复杂度为O(1)的用单链表实现入栈出栈操作
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
#define LEN sizeof(struct List)
#define MAX 10
struct List
{
struct List*next;
int top;
int key;
};
struct List*Initialization(struct List &L)
{
L.next=NULL;
L.next=(struct List*)malloc(LEN);
L.next->next=L.next;
L.top=-1;
return L.next;
}
int PUSH(struct List &L,int k)
{
struct List*x;
if (L.top==MAX)
{
cout<<"overflow!"<<endl;
return -1;
}
else
{
x= (struct List*)malloc(LEN);
x->key=k;
x->next=L.next->next;
L.next->next=x;
x->key=k;
L.top++;
return x->key;
}
}
int POP(struct List &L)
{
struct List*x;
x=L.next->next;
if (L.top==-1)
{
cout<<"underflow!"<<endl;
return -1;
}
else
{
L.next->next=L.next->next->next;
L.top--;
return x->key;
}
}
//打印数据
void Print(List &L)
{