数据结构C语言版问题 C语言版的数据结构问题?
\u6570\u636e\u7ed3\u6784\uff08C\u8bed\u8a00\u7248\uff09\u95ee\u9898\uff0c\u6c42\u5927\u795e\u89e3\u7b54\uff1f#include
#include
#include
#define TElemType int
int top=-1;
//top\u53d8\u91cf\u65f6\u523b\u8868\u793a\u6808\u9876\u5143\u7d20\u6240\u5728\u4f4d\u7f6e
typedef struct BiTNode{
TElemType data;//\u6570\u636e\u57df
struct BiTNode *lchild,*rchild;//\u5de6\u53f3\u5b69\u5b50\u6307\u9488
}BiTNode,*BiTree;
//\u521d\u59cb\u5316\u6811\u7684\u51fd\u6570
void CreateBiTree(BiTree *T){
*T=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=1;
(*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->data=2;
(*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild->data=6;
(*T)->lchild->rchild->lchild=NULL;
(*T)->lchild->rchild->rchild=NULL;
(*T)->rchild->data=4;
(*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->lchild->data=7;
(*T)->rchild->lchild->lchild=NULL;
(*T)->rchild->lchild->rchild=NULL;
(*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->rchild->data=8;
(*T)->rchild->rchild->lchild=NULL;
(*T)->rchild->rchild->rchild=NULL;
(*T)->lchild->lchild->data=5;
(*T)->lchild->lchild->lchild=NULL;
(*T)->lchild->lchild->rchild=NULL;
}
//\u524d\u5e8f\u548c\u4e2d\u5e8f\u904d\u5386\u4f7f\u7528\u7684\u8fdb\u6808\u51fd\u6570
void push(BiTNode** a,BiTNode* elem){
a[++top]=elem;
}
//\u5f39\u6808\u51fd\u6570
void pop( ){
if (top==-1) {
return ;
}
top--;
}
void displayElem(BiTNode* elem){
printf("%d ",elem->data);
}
//\u62ff\u5230\u6808\u9876\u5143\u7d20
BiTNode* getTop(BiTNode**a){
return a[top];
}
//\u4e2d\u5e8f\u904d\u5386\u975e\u9012\u5f52\u7b97\u6cd5
void InOrderTraverse1(BiTree Tree){
BiTNode* a[20];//\u5b9a\u4e49\u4e00\u4e2a\u987a\u5e8f\u6808
BiTNode * p;//\u4e34\u65f6\u6307\u9488
push(a, Tree);//\u6839\u7ed3\u70b9\u8fdb\u6808
while (top!=-1) {//top!=-1\u8bf4\u660e\u6808\u5185\u4e0d\u4e3a\u7a7a\uff0c\u7a0b\u5e8f\u7ee7\u7eed\u8fd0\u884c
while ((p=getTop(a)) &&p){//\u53d6\u6808\u9876\u5143\u7d20\uff0c\u4e14\u4e0d\u80fd\u4e3aNULL
push(a, p->lchild);//\u5c06\u8be5\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u8fdb\u6808\uff0c\u5982\u679c\u6ca1\u6709\u5de6\u5b69\u5b50\uff0cNULL\u8fdb\u6808
}
pop();//\u8df3\u51fa\u5faa\u73af\uff0c\u6808\u9876\u5143\u7d20\u80af\u5b9a\u4e3aNULL\uff0c\u5c06NULL\u5f39\u6808
if (top!=-1) {
p=getTop(a);
pop();
displayElem(p);
push(a, p->rchild);
}
}
}
int main(){
BiTree Tree;
CreateBiTree(&Tree);
printf("\u4e2d\u5e8f\u904d\u5386\u7b97\u6cd5: \n");
InOrderTraverse1(Tree);
}
struct node *current; //\u5b9a\u4e49\u4e00\u4e2a\u4e34\u65f6\u7ed3\u6784\u6307\u9488\uff0c\u6307\u5411\u5f53\u524d\u7ed3\u70b9
for(current=&h; (curren->data != a) && (current->next != NULL); )
current=next; //\u5982\u679c\u5f53\u524d\u7ed3\u70b9\u7684\u503c\u4e0d\u7b49\u4e8ea\uff0c\u5e76\u4e14\u4e0d\u662f\u6700\u540e\u4e00\u4e2a\u7ed3\u70b9\uff0c\u6307\u5411\u4e0b\u4e00\u4e2a\u7ed3\u70b9
s.next=current->next; //\u627e\u5230\u6ee1\u8db3\u6761\u4ef6\u7684\u8282\u70b9\u540e\uff0c\u63d2\u5165\u7ed3\u70b9s
current->next=&s;
template <class Type> ListNode <Type> * List <Type> :: Max ( ) {
//在单链表中进行一趟检测,找出具有最大值的结点地址, 如果表空, 返回指针NULL
if ( first->link == NULL ) return NULL; //空表, 返回指针NULL
ListNode <Type> * pmax = first->link, p = first->link->link;
//假定第一个结点中数据具有最大值
while ( p != NULL ) { //循环, 下一个结点存在
if ( p->data > pmax->data ) pmax = p; //指针pmax记忆当前找到的具最大值结点
p = p->link; //检测下一个结点
}
return pmax;
}
2.实现从一维数组A[n]建立单链表的函数如下:
template <class Type> void List <Type> :: Create ( Type A[ ], int n ) {
//根据一维数组A[n]建立一个单链表,使单链表中各元素的次序与A[n]中各元素的次序相同
ListNode<Type> * p;
first = p = new ListNode<Type>; //创建表头结点
for ( int i = 0; i < n; i++ ) {
p->link = new ListNode<Type> ( A[i] ); //链入一个新结点, 值为A[i]
p = p->link; //指针p总指向链中最后一个结点
}
p->link = NULL;
}
或者采用递归方法实现
template<Type> void List<Type> :: create ( Type A[ ], int n, int i,
ListNode<Type> *& p ) {
//私有函数:递归调用建立单链表
if ( i == n ) p = NULL;
else { p = new ListNode<Type>( A[i] ); //建立链表的新结点
create ( A, n, i+1, p->link ); //递归返回时p->link中放入下层p的内容
}
}
template<Type> void List<Type> :: create ( Type A[ ], int n ) {
//外部调用递归过程的共用函数
first = current = new ListNode<Type>; //建立表头结点
create ( A, n, 0, first->link ); //递归建立单链表
}
3, 实现在非递减有序的单链表中删除值相同的多余结点的函数如下:
template <class Type> void List <Type> :: tidyup ( ) {
ListNode<Type> * p = first->link, temp; //检测指针, 初始时指向链表第一个结点
while ( p != NULL && p->link != NULL ) //循环检测链表
if ( p->data == p->link->data ) { //若相邻结点所包含数据的值相等
temp = p->first; p->link = temp->link; //为删除后一个值相同的结点重新拉链
delete temp; //删除后一个值相同的结点
}
else p = p->link; //指针p进到链表下一个结点
}
参考别人的,这题目我才不会做。
绛旓細绗38棰樼殑绛旀鏄疊銆傝鐪嬪浘锛欰[1..3, 1..4]鏄竴涓3琛4鍒楃殑浜岀淮鏁扮粍锛屼互鍒楀簭鎺掑垪鍏冪礌鏃讹紝鎸夊厛浠庝笂寰涓嬨佸啀浠庡乏鑷冲彸鐨勯『搴忎緷娆℃帓鍒楀悇涓厓绱狅紝濡傚浘涓殑1銆2銆3銆4...鍒嗗埆琛ㄧず浜岀淮鏁扮粍鍏冪礌鐨勫簭鍙凤紙鍒楀簭鎺掑垪锛夈侺oc(A[2,3]) = Loc(A[1,1]) + 2 * 3 + 1 = Loc(A[1,1]) + 7 ...
绛旓細瀹氫箟鍜屽0鏄庝笉鍖归厤锛屼細瀵艰嚧缂栬瘧鍣ㄧ紪璇戠殑鏃跺欐鏌ョ被鍨嬮敊璇紝浠庤屽鑷磋繍琛屼笉鍙鏈熷悗鏋 浣犺繖涓緥瀛愶紝褰㈠弬瑕佹眰鏄寚閽 浣嗘槸澹版槑涓洪潪鎸囬拡锛岃繖鏍峰鏋滀綘鎸夋寚閽堜紶瀹炲弬锛岀紪璇戝氨浼氭姤閿 鎸夌収闈炴寚閽堜紶鍊硷紝閭d箞鍦ㄥ嚱鏁板唴閮ㄥ*taller璧嬪煎氨浼氬紩璧峰穿婧 鎬讳箣浼氬嚭闂
绛旓細閭d箞A灞炰簬涓涓鏁版嵁缁撴瀯锛宎,b,p閮藉睘浜庢暟鎹厓绱犮侫鐨勫垵濮嬪ぇ灏忔槸鍥涗釜瀛楄妭锛屾棦鍏冪礌鏈澶х殑涓涓殑绌洪棿銆傘傘傞噷闈㈢殑鎴愬憳鍚屾椂瀛樺湪锛屽悇鑷湁鍚勮嚜鐨勫湴鍧锛屼簰涓嶅共鎵般傛棦pA->a,pA->b,pA->p鏄彲浠ュ悓鏃跺瓨鍦ㄦ淮銆傛暟鎹被鍨 鐢╡num 瀹氫箟锛屽叡鐢ㄥ瓨鍌ㄥ崟鍏 enum{int a=1 ,int b ,char c=鈥榗鈥檥e,b銆俥num鍏跺疄...
绛旓細1.鎵惧埌缁撴瀯鐨勫ご(H)鍜屽熬(R)2.涓嬮潰鏄吉浠g爜 while(H鍦≧涔嬪墠) do begin if data_at[H]!=data_at[R] then return false;//鑲畾涓嶅绉 H<-鍚庣户;R<-鍓嶉┍;end;return true;鏃堕棿澶嶆潅搴(strlen(s))鏃负琛ㄩ暱
绛旓細杩欎釜鏄绠梟瓒嬩簬鏃犵┓澶ф椂鐨勯樁娆★紝鍥犳闃舵浠庝綆鍒伴珮鐨勬搴忎负锛31+1/n , 100n + nlog2(n), 20log2(2^n) + n^2, 2^n + 89n^3
绛旓細include<stdio.h> include<malloc.h> /*浠庨敭鐩樿緭鍏5涓鐢熺殑淇℃伅锛屽鐢熺殑淇℃伅鍖呮嫭濮撳悕鍜屽鍙蜂袱涓儴鍒嗭紝浜х敓椤哄簭琛紝骞惰緭鍑虹敤鎴疯緭鍏ョ殑缁撶偣鍊笺備粠閿洏杈撳叆瑕佹彃鍏ュ鐢熺殑瀛﹀彿锛屽鍚嶏紝灏嗗叾鎻掑叆鍦ㄥ搴斾綅缃笂锛岃緭鍑洪『搴忚〃鎵鏈夌粨鐐瑰硷紝瑙傚療杈撳嚭缁撴灉*/ //#define uchar unsigned char //#define uint unsigned ...
绛旓細include <stdio.h> include <string.h> include <stdlib.h> define TElemType int int top=-1;//top鍙橀噺鏃跺埢琛ㄧず鏍堥《鍏冪礌鎵鍦ㄤ綅缃 typedef struct BiTNode{ TElemType data;//鏁版嵁鍩 struct BiTNode *lchild,*rchild;//宸﹀彸瀛╁瓙鎸囬拡 }BiTNode,*BiTree;//鍒濆鍖栨爲鐨勫嚱鏁 void CreateBiTree(BiTree ...
绛旓細Q->next->next=p->next;free(p);rturn OK;}//DeCiqueue 3.31 int Palindrome_Test(){ InitStack(S);InitQueue(Q);while((c=getchar())!='@'){ Push(S,c);EnQueue(Q,c);} while(!StackEmpty(S)){ pop(S,a);DeQueue(Q,b);if(a!=b)return ERROR;} return OK;} ...
绛旓細//璇曠紪鍐欎竴閬撳湪鍗曢摼琛ㄤ腑鏁版嵁鍩熷间负a鐨勭粨鐐逛箣鍚,//鎻掑叆涓涓柊缁撶偣鐨勭畻娉.鑻ュ師閾捐〃涓棤鏁版嵁鍩熷间负a鐨勭粨鐐,//鍒欐妸鏂扮粨鐐规彃鍏ュ埌琛ㄥ熬.璁炬柊缁撶偣鏁版嵁鍩熷间负x.灏忓紵鍒濆,璋㈣阿澶у鍟 //瀹氫箟缁撶偣 typedef struct node{ int data锛泂truct node *next锛泒LNode ,*LinkList;//list涓哄崟閾捐〃鐨勮〃澶存寚閽堬紝鎻掑叆...
绛旓細typedef int m;//澹版槑m涓篿nt鍨 typedef struct A//瀹氫箟缁撴瀯浣撶被鍨嬶紝骞跺0鏄嶢銆丅 {m data;//瀹氫箟m鍨嬪彉閲廳ata struck A*next;//瀹氫箟缁撴瀯浣撶被鍨婣鐨勬寚閽堝彉閲弉ext }A, *B;//A涓虹粨鏋勪綋绫诲瀷锛孊涓虹粨鏋勪綋绫诲瀷鎸囬拡 鎵鏈夛紝A銆丅涓嶆槸鍚屼竴涓被鍨嬶紝鍙畾涔変竴涓篃鍙互锛屽彲浠ヨ繖鏍峰仛銆侫 a;//瀹氫箟缁撴瀯浣...