1、数据结构算法设计题及答案样本数据构造算法设计题及答案 1、对带表头结点有序单链表,编写算法向单链表中插入元素x,使其保持有序。答案:typedef datatype int;struct node /结点构造 datatype data; node * next;; /注:也可以用自然语言描述void insertOrder(node *head,datatype x) /记录 node *s;p=head;while (p-next -datanext;s=( node *)malloc(sizeof(node) ;s-data=x;s-next= p-next;p-next=s; 2、对带
2、表头结点单链表,编写算法求单链表长度。答案:typedef datatype int;struct node /结点构造 datatype data; node * next;; /注:也可以用自然语言描述int Length(node *head) / 求单链表长度 int num=0;node *p=head-next;while (p)num+ ;p=p-next;return num; 3、试写出单链表插入与删除算法,并用C编写相应程序。答案:typedef datatype int;struct node /结点构造 datatype data; node * next;; 单链表插
3、入参照算法: /在包括元素x结点前插入新元素bvoid ins_linked_LList(node * head ,datatype x,datatype b) node *p,*q;p=new node ;/申请一种新结点p-d=b;/置新结点数据域if (head=NULL)/原链表为空 head=p;p-next=NULL;return;if (head-d=x)/在第一种结点前插入 p-next=head;head=p;return;q=head;while (q-next!=NULL)&(q-next)-d)!=x)q=q-next;/寻找包括元素x前一种结点qp-next=q-ne
4、xt;q-next=p;/新结点p插入到结点q之后return;单链表删除参照算法: int del_linked_LList(node * head ,T x) /删除包括元素x结点元素 node *p,*q;if (head=NULL) return(0);/链表为空,无删除元素if (head-d)=x)/删除第一种结点 p=head-next;delete head;head=p;return(1);q=head;while (q-next!=NULL)&(q-next)-d)!=x)q=q-next;/寻找包括元素x前一种结点qif (q-next=NULL)return(0);/链
5、表中无删除元素p=q-next;q-next=p-next;/删除q下一种结点pdelete p;/释放结点p存储空间return(1);4、对带表头结点单链表,编写算法记录单链表中不不大于x元素个数。答案:typedef datatype int;struct node /结点构造 datatype data; node * next;; /注:也可以用自然语言描述int CountX(node *head,datatype x) /记录 int num=0;p=head-next;while (p)if(p-datax) num+ ;p=p-next;return num; 5、对带表头结
6、点单链表,编写算法将单链表就地逆置。答案:typedef datatype int;struct node /结点构造 datatype data; node * next;; /注:也可以用自然语言描述void ReverseList(node *head) / 将单链表就地逆置 node *q,*p=head-next;head-next=NULL;while (p)q=p;p=p-next;q-next= head-next;head-next=q ; 6、写出链队列入队、出队算法。 答案:typedef datatype int;struct node /结点构造 datatype d
7、ata; node * next;; /注:也可以用自然语言描述struct LinkQueue /结点构造 node * front; node * rear;; int EnterQueue(LinkQueue *q,datatype e) /带头结点链队列入队q-rear-next=( node *)malloc(sizeof(node);q-rear-data=e;q-rear= q-rear-next;return 1;int DeleteQueue(LinkQueue *q,datatype *e) /带头结点链队列出队if(q-rear= q-front) return 0;p=
8、 q-front-next;*e= p-data;q-front-next=p-next;free(p);if(q-front-next=NULL)q-rear= q-front;return 1;7、编写算法对二叉链表存储二叉树进行前序遍历,并记录二叉树中叶子结点数。答案:typedef datatype int;struct node /结点构造 datatype data; node * lchild,*rchild;; /注:也可以用自然语言描述void preOrder(node* root) /前序遍历 if(root=NULL) return ;/ 空树 printf(%5d,r
9、oot-data); preOrder (root-lchild );/ 前序遍历根左子树 preOrder (root-rchild );/ 前序遍历根右子树 int numOfLeaf (node* root) /记录二叉树中结点总数 if(root=NULL) return 0;/ 空树 if(root-lchild =NULL)& (root-rchild =NULL) ) return 1;/ 叶子 return numOfLeaf (root-lchild )+ numOfLeaf (root-rchild ); /阐明:算法表达形式及办法各种各样,不可拘泥于固法。8、对以二叉链表
10、存储二叉树,编写对二叉树进行中序遍历算法,以及求二叉树高度算法。答案:typedef datatype int;struct node /结点构造 datatype data; node * lchild,*rchild;; /注:也可以用自然语言描述void inOrder(node* root) /前序遍历 if(root=NULL) return ;/ 空树 inOrder (root-lchild );/ 中序遍历根左子树 printf(%5d,root-data); inOrder (root-rchild );/ 中序遍历根右子树 int height (node* root) /
11、求二叉树高度 int h1,h2 if(root=NULL) return 0;/ 空树 h1=height (root-lchild );h2= height (root-rchild );return 1+(h1=h2)?h1:h2; /阐明:算法表达形式及办法各种各样,不可拘泥于固法。9、编写对有序顺序表折半查找算法。 答案:#define MaxSize 100typedef struct KeyType key; OtherType otherData;datatype; struct SeqList /结点构造 datatype dataMaxSize; /0号单元不用 int l
12、en;; int BinSearch(SeqList SL,KeyType k) low=1,high=SL.len;while(low=high) mid=( low+high)/2; if(SL.datamid.key=k) return mid;/查找成功 if(SL.datamid.keyk)high= mid-1;elselow= mid+1;Return 0;/查找失败10、试写一种算法,鉴别一行字符中圆括号与否配对。 答案:int BracketMatch(char*str) /圆括号配对鉴别,配对返回1,否则返回0Stack s; InitStack(&s); for(i=0;stri;i+)switch( stri ) case (:Push(&s,stri);break; case ):if( IsEmpty(s) ) return 0;Pop(&s); if( IsEmpty(s) ) return 1; return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1