8月1日
7、題目:設單鏈表的表頭指針為h,結點結構由data和next兩個域構成,其中data域為字符型。
試設計算法判斷該鏈表的前n個字符是否中心對稱。例如xyx,xyyx都是中心對稱。
1、題目:利用鏈表實現一個先入后出的棧結構,并提供棧操作的push和pop的接口
#include <stdio.h> #include <stdlib.h>struct stack {int num;struct stack * next; };typedef struct stack Stack; typedef struct stack* Link;void create_node(Link *node) {*node = (Link)malloc(sizeof(Stack));if(*node == NULL){printf("malloc error!\n");exit(-1);} }void create_link(Link *head) {create_node(head);(*head)->next = NULL; }void push_stack(Link head,Link new_node) {new_node->next = head->next;head->next = new_node; }void pop_stack(Link head) {Link p;int n;p = head->next;while(p != NULL){n = p->num;printf("%d\n",n);head->next = p->next;free(p);p = head->next;} }int main() {Link head;Link new_node;int i;create_link(&head);for(i = 0;i < 10;i++){create_node(&new_node);new_node->num = i + 1;push_stack(head,new_node); //進棧}pop_stack(head); //出棧return 0; }2、題目:使用雙向鏈表來實現雙向隊列
使用一個雙向鏈表來實現一個雙向的隊列,并且讓隊列具有以下的操作:
(1)判斷隊列是否為空
(2)得到雙向隊列中元素的個數
(3)向左端添加一個新元素
(4)向右端添加一個新元素
(5)從左端刪除一個元素
(6)從右端刪除一個元素
#include <stdio.h> #include <stdlib.h>struct quece {int num;struct quece * next;struct quece * prior; };typedef struct quece Quece; typedef struct quece* Link;void create_node(Link *node) {*node = (Link)malloc(sizeof(Quece));if(*node == NULL){printf("malloc error!\n");exit(-1);} }void create_link(Link *head) {create_node(head);(*head)->prior = (*head)->next = *head; }void push_quece_right(Link head,Link new_node) {new_node->next = head->next;new_node->prior = head;head->next = new_node;new_node->next->prior = new_node; }void pop_quece_right(Link head) {Link p;if(head == NULL){printf("no such quece!\n");return;}p = head->prior;if(p == NULL){printf("quece is empty!\n");return;}while(p != head){printf("%d\n",p->num);p = p->prior;} }void push_quece_left(Link head,Link new_node) {new_node->next = head;new_node->prior = head->prior;head->prior = new_node;new_node->prior->next = new_node; }void pop_quece_left(Link head) {Link p;if(head == NULL){printf("no such quece!\n");return;}p = head->next;if(p == NULL){printf("quece is emoty!\n");return;}while(p != head){printf("%d\n",p->num);p = p->next;} }int main() {Link head;Link new_node;int i;create_link(&head);for(i = 0;i < 10;i++){create_node(&new_node);new_node->num = i + 1;//push_quece_right(head,new_node); //右進隊push_quece_left(head,new_node); //左進隊}//pop_quece_right(head); //右進隊的出隊pop_quece_left(head); //左進隊出隊return 0; }總結
- 上一篇: java和c哪个效率高_可以通俗详细地解
- 下一篇: 未来的android客户端技术发展方向