数据结构学习趣事

用数组实现一个顺序打乱的栈

1.创建数组栈
以一30个单元的栈为例(这是一个存储指数为整数的一元多项式的栈):

typedef struct List{
    int exponent;
    int coefficient;    
    int next;
}list;
typedef struct Stack{
    list data[n];    
    int top;
}stack;
stack S;

2.使用洗牌算法得到乱序数组

int i=0;    
int rand_[n];    
for(i=0;i<n;i++){
        rand_[i]=(i+1)%n;    
}    
for(i=0;i<n;i++){
        int r=rand()%n;        
        int t=rand_[r];         
        rand_[r]=rand_[i];        
        rand_[i]=t;   
}

3.将乱序数组里的环解开

int i=0,head=0,tail=0;
//最终头节点是0,尾节点指向-1
int check[n];//检测此单元是否已经遍历过    
int k=n;//记录还有多少单元没有遍历    
for(i=0;i<n;i++){
        check[i]=0;   
}    
while(k){
        i=0;        
        while (check[i]) {            
        	i++;        
        }        
        head=i;        
        check[i]=1;        
        k--;        
        while(check[rand_[i]]==0){            
        	i=rand_[i];            
        	check[i]=1;            
        	k--;        
        }        
        if(tail)rand_[tail]=head;        
        tail=i;        
        rand_[tail]=-1;   
}

4.将乱序数组的数据赋给栈指向下个节点的变量

S.top=0;    
for(int i=0;i<n;i++){        
	S.data[i].next=rand_[i];   
}

PS:附加内容–测量程序运行时间

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	clock_t start_,finish_;    
	double time;    
	start_=clock();
	//程序内容
	finish_=clock();    
	time=(double)(finish_-start_)/CLOCKS_PER_SEC;    
	printf("\n此程序运行了%f秒\n",time);    
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值