課題教えてください!
Posted: 2012年1月28日(土) 04:15
課題1:
授業で取り扱ったスタックはデータを格納するために配列を用いているため、一定数以上の
データを Push することが出来ない。そこで、配列の代わりに連結リストを用いることで、メモ リ領域の許す限り無限にデータを Push することのできるスタックを実現する方法を考える。具 体的には、連結リストに対して Push と Pop の二つの手法を定義する。新しく push されたデー タを連結リストの末尾に加えていると、Push/Pop 操作のたびに毎回連結リストの先頭から末尾 までを辿らなければならない。そのため、多量のデータをこのスタックに Push すると、毎回の Push/Pop 操作に長い時間がかかるようになってしまう。これに対し、連結リストの先頭にデー タを足す(dummy データと次のデータの間にデータを挿入する)ようにすれば、リストを辿る必 要がないため、多量のデータに対しても問題なく動作しそうである。
①初期状態 dummy
②1をPush dummy→1
③2をPush dummy→2→1
④3をPush dummy→3→2→1
どうかお願いします。
授業で取り扱ったスタックはデータを格納するために配列を用いているため、一定数以上の
データを Push することが出来ない。そこで、配列の代わりに連結リストを用いることで、メモ リ領域の許す限り無限にデータを Push することのできるスタックを実現する方法を考える。具 体的には、連結リストに対して Push と Pop の二つの手法を定義する。新しく push されたデー タを連結リストの末尾に加えていると、Push/Pop 操作のたびに毎回連結リストの先頭から末尾 までを辿らなければならない。そのため、多量のデータをこのスタックに Push すると、毎回の Push/Pop 操作に長い時間がかかるようになってしまう。これに対し、連結リストの先頭にデー タを足す(dummy データと次のデータの間にデータを挿入する)ようにすれば、リストを辿る必 要がないため、多量のデータに対しても問題なく動作しそうである。
①初期状態 dummy
②1をPush dummy→1
③2をPush dummy→2→1
④3をPush dummy→3→2→1
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct data{
char num;
struct data* next;
}DATA;
void Push(DATA* s,char n);
char Pop(DATA* s);
void PrintStack(DATA* s);
int main(){
DATA start;
char input,p;
start.num=-1;
start.next=NULL;
while(1){
input=getchar();
if(isdigit(input)){
Push(&start,input);
}else if(input=='p'){
p=Pop(&start);
if(p!=-1){
printf("pop:%c\n",p);
}
}else if(input=='s'){
PrintStack(&start);
}else if(input=='q'){
break; }
}
return 0; }
void Push(DATA* s,char n){ //ここを作る
}
char Pop(DATA* s){ //ここを作る
}
void PrintStack(DATA* s){ //ここを作る
}