題目:
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 ...