資料結構 棧與佇列

2021-07-16 09:37:21 字數 3887 閱讀 2362

題目:

1.編寫函式,採用鏈式儲存實現棧的初始化、入棧、出棧操作

2.編寫函式,採用順序儲存實現棧的初始化、入棧、出棧操作

3.編寫函式,採用鏈式儲存實現佇列的初始化、入隊、出隊操作

4.編寫函式,採用順序儲存實現佇列的初始化、入隊、出隊操作

5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯上述演算法

題目分析:

1.順序棧的型別定義

#define max 100  //棧的最大值

typedef struct

sqstack;

2.鏈棧的型別定義

typedef struct sqnode

*sqptr;

typedef struct

3.順序佇列的型別定義

#define max 100 //佇列的最大長度

typedef struct

sqqueue;

4.單鏈佇列的型別定義

typedef struct qnode

*queueptr;

typedef struct

下面是具體的程式:

#define _crt_secure_no_warnings 1

#include #include #define overflow -2 

#define error 0 

#define ok 1 

#define max 100    //棧的最大值

typedef int selemtype; 

typedef int qelemtype; 

typedef struct

sqstack;  

sqstack initstacka( )  //順序儲存實現棧的初始化  

void pusha(sqstack &s, int x)   //順序儲存實現棧的入棧操作

*s.top++ = x; 

}   

void popa(sqstack &s)    //順序儲存實現棧的出棧操作

else 

}  void printa(sqstack s)   //輸出

printf("\n"); 

}   

typedef struct sqnode

*sqptr,node; 

typedef struct 

stack;

stack initstackb()  //鏈式儲存實現棧的初始化

s.top -> link = null;  

return(s); 

}   

void pushb(stack &s, int x)  //鏈式儲存實現棧的入棧操作

p -> data = x;  

p -> link = s.top -> link;  

s.top -> link = p; } 

void popb(stack &s)   //鏈式儲存實現棧的出棧操作

else 

}   

typedef struct qnode 

*queueptr,qnode; 

typedef struct 

linkqueue;

linkqueue initqueue()  //鏈式儲存實現佇列的初始化

q.front -> next = null;   

return(q); }  

void enqueue(linkqueue &q, qelemtype x)   //鏈式儲存實現佇列的入隊操作

p -> data = x; 

p -> next = null; 

q.rear -> next = p;  

q.rear = p; }  

void dequeue(linkqueue &q)   //鏈式儲存實現佇列的出隊操作

queueptr p;  

p = q.front -> next;  

x = p -> data;  

printf("\t刪除的隊頭元素是%d\n", x);  

q.front -> next = p -> next;  

if(q.rear == p)

free(p);  

return; 

}   

typedef struct 

sqqueue; 

sqqueue initqueueb()  //順序儲存實現佇列的初始化

s.front = s.rear = 0;  

return(s); } 

void enqueueb(sqqueue &s, int x)   //順序儲存實現佇列的入隊操作

s.base[s.rear] = x;  

s.rear = (s.rear+1) % max; } 

void dequeueb(sqqueue &s)  //順序儲存實現佇列的出隊操作

x = s.base[s.front];  

s.front = (s.front+1) % max;  

printf("\t刪除的隊頭元素是:%d\n", x); }  

int main() 

printf("\t鏈式儲存棧的入棧操作完成!\n");

break;                 

case 3:

popb(sa);

break;}}

break;

case 2:

sqstack s;     

printf("\t1.順序儲存實現棧的初始化\n");     

printf("\t2.順序儲存實現棧的入棧操作\n");     

printf("\t3.順序儲存實現棧的出棧操作\n");     

while(1)

printf("\t順序儲存棧的入棧操作完成!\n");                   

printa(s);

break;               

case 3:

popa(s);         

printa(s);

break;}}

break;

case 3:

linkqueue q;         

printf("\t1.鏈式儲存實現隊的初始化\n");          

printf("\t2.鏈式儲存實現隊的入棧操作\n");          

printf("\t3.鏈式儲存實現隊的出棧操作\n");         

while(1)

printf("\t鏈式儲存隊的入棧操作完成!\n");

break;                

case 3:

dequeue(q);

break;}}

break;   

case 4:

sqqueue sv;   

printf("\t1.順序儲存實現隊的初始化\n");          

printf("\t2.順序儲存實現隊的入棧操作\n");          

printf("\t3.順序儲存實現隊的出棧操作\n");          

while(1)

printf("\t鏈式儲存棧的入棧操作完成!\n");

break;

case 3: 

dequeueb(sv);

break;}}

break; 

} system("pause");

return 0;

}

資料結構 棧與佇列

棧的原則是後進先出,即插入與刪除元素均在棧頂進行。獲取棧頂元素 s.top 佇列的原則是先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行。獲取隊頭元素 q.front 思路 用兩個棧,乙個棧用來進隊,乙個棧用來出隊,當資料進入佇列的時候,我們將其壓入乙個棧,當資料出隊的時候,我們將儲存在棧內的資料...

資料結構 棧與佇列

1.順序棧 基本操作 typedef int elemtype 定義 順序棧 typedef struct sqstack 判空 bool stackempty sqstack s 進棧 bool push sqstack s elemtype x 出棧操作 bool pop sqstack s e...

資料結構 棧與佇列

1.棧的定義 2.用棧實現鍊錶 public class stacklinked public void setdata int data public node getnext public void setnext node next private int data private node ...