赞
踩
本文以王道23版本数据结构与算法书本伪代码为基础进行编写
内容仅供参考,配有个人编写代码辅助思维导图,有部分地方为个人理解,如果发现理解有偏差或者有误欢迎评论区指正,谢谢大家。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> typedef struct student { int num; char name[30]; char sex[30]; }stu, * Studefine; typedef int INT; int main() { stu s = { 1080,"ssao","nan" }; Studefine p; INT n = 100; p = &s; printf("%d,p->num=%d", n, p->num); return 0; }
#include <stdio.h> #include <malloc.h> void change(int& s) { s++; }; void gave(int*& d) { d = (int*)malloc(20);//强制类型转换 d[0] = 1; } int main() { int s = 10; change(s); printf("%d\n", s); int* d = NULL; gave(d); printf("%d\n", d[0]); return 0; }
#include <stdio.h> #include <stdlib.h> #define MaxSize 50//这个地方不要加“;” typedef int Minter; typedef struct { Minter data[MaxSize]; int len; }Sqlist; //插入操作 bool Cain(Sqlist& L, int i, Minter e) { if (i < 1 || i > L.len) return false; if (L.len >= MaxSize) return false; for (int j = L.len; j >= i; j--) L.data[j] = L.data[j - 1]; L.data[i - 1] = e; L.len++; return true; } //打印操作 void printf_m(Sqlist& L) { for (int i = 0; i < L.len; i++) printf("%3d", L.data[i]); printf("\n"); } //删除操作 bool DelList(Sqlist& L, int i, Minter& e) { if (i < 1 || i > L.len) return false; if (L.len == 0) return false; e = L.data[i - 1]; for (int j = i; j < L.len; j++) L.data[j - 1] = L.data[j]; L.len--; return true; } //查找操作 int FindList(Sqlist& L, Minter e) { for (int i = 0; i < L.len; i++) if (L.data[i] == e) return i + 1; return 0; } int main() { Sqlist L; bool res; int del = 0;//存储删除元素 L.data[0] = 1; L.data[1] = 2; L.data[2] = 3; L.len = 3; //插入部分调用及反馈 res = Cain(L, 2, 60); if (res) { printf("插入成功\n"); printf_m(L); } else { printf("插入失败\n"); } //删除部分调用及反馈 res = DelList(L, 1, del); if (res) { printf("删除成功\n"); printf_m(L); } else { printf("删除失败\n"); } int ele_pos; ele_pos = FindList(L, 60); if (ele_pos) { printf("查找成功\n元素位置为 %d\n", ele_pos); } else { printf("查找失败"); } }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <malloc.h> //3 4 5 6 7 9999 typedef int Emoint; typedef struct Lnote { Emoint data; struct Lnote* next; }Lnote, * Linklist; //头插法 Linklist Chahead(Linklist& L) { Lnote* s; int x; L = (Linklist)malloc(sizeof(Lnote)); L->next = NULL; scanf("%d", &x); while (x != 9999) { s = (Lnote*)malloc(sizeof(Lnote)); s->data = x; s->next = L->next; L->next = s; scanf("%d", &x); } return L; } //尾插法 Linklist Chatail(Linklist& L) { int x; L = (Linklist)malloc(sizeof(Lnote)); Lnote* s, * r = L; scanf("%d", &x); while (x != 9999) { s = (Lnote*)malloc(sizeof(Lnote)); s->data = x; r->next = s; r = s; scanf("%d", &x); } r->next = NULL; return L; } //打印 void PrintfList(Linklist L) { L = L->next; while (L != NULL) { printf("%3d", L->data); L = L->next; } printf("\n"); } //按序号查找结点值 Linklist NumFind(Linklist L, int i) { int j = 1; Lnote* p = L->next;//让p指向第一个结点 if (i == 0) return L;//i是零就返回头结点 if (i < 1) return NULL; while (p && j < i) { p = p->next;//让p指向下一个结点 j++; } return p; } //按值查找结点值 Linklist Find(Linklist L, Emoint i) { Linklist p = L->next; while (p != NULL && p->data != i) p = p->next; return p; } //新结点处插入操作 bool ChaList(Linklist L, int i, Emoint j) { Linklist p = NumFind(L, i - 1); if (p == NULL) return false; Linklist s = (Linklist)malloc(sizeof(Lnote)); s->data = j; s->next = p->next; p->next = s; return 0; } //删除操作 bool DelList(Linklist L, int i) { Linklist p = NumFind(L, i - 1); if (p == NULL) return false; Linklist s; s = p->next; p->next = s->next; free(s); return true; } //主函数 int main() { Linklist L; Linklist Cun; Chahead(L);//头插法 //Chatail(L);//尾插法 PrintfList(L);//打印 //按序号查找 Cun = NumFind(L, 4); if (Cun != NULL) { printf("按序号查找成功\n"); printf("%d\n", Cun->data); } //按值查找 Cun = Find(L, 6); if (Cun != NULL) { printf("按值查找成功\n"); printf("%d\n", Cun->data); } //插入节点 ChaList(L, 2, 99); if (true) { printf("插入成功\n"); PrintfList(L); } //删除节点 DelList(L, 4); if (true) { printf("删除成功\n"); PrintfList(L); } }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int Elemon; typedef struct NBone { Elemon data; struct NBone* prior, * next; }NB, * NBlist; //头插法 NBlist ChaHead(NBlist& DL) { NB* p; int x; DL = (NBlist)malloc(sizeof(NB)); DL->next = NULL; DL->prior = NULL; scanf("%d", &x); while (x != 9999) { p = (NBlist)malloc(sizeof(NB)); p->data = x; p->next = DL->next; if (DL->next != NULL) { DL->next->prior = p; } p->prior = DL; DL->next = p; scanf("%d", &x); } return DL; } //打印操作 void PrintfDL(NBlist DL) { DL = DL->next; while (DL->next != NULL) { printf("%3d", DL->data); DL = DL->next; } printf("\n"); } //尾插法 NBlist ChaTail(NBlist& DL) { int x; DL = (NBlist)malloc(sizeof(NB)); NBlist s, r = DL; scanf("%d", &x); while (x != 9999) { s = (NBlist)malloc(sizeof(NB)); s->data = x; r->next = s; s->prior = r; r = s; scanf("%d", &x); } r->next = NULL; return DL; } //按序号查找 NBlist numFind(NBlist& DL, int i) { int j = 1; NBlist p = DL->next; if (i == 0) return DL; if (i < 1) return NULL; while (p && j < i) { p = p->next; j++; } return p; } //插入 bool ChaAom(NBlist DL, int i, Elemon e) { NBlist p = numFind(DL, i - 1); if (p == NULL) return false; NBlist s = (NBlist)malloc(sizeof(NB)); s->data = e; s->next = p->next; p->next->prior = s; s->prior = p; p->next = s; return true; } //删除 bool DelDL(NBlist DL, int i) { NBlist p = numFind(DL, i - 1); if (p == NULL) return false; NBlist r; r = p->next; if (r == NULL) return false; p->next = r->next; if (r->next != NULL) r->next->prior = p; free(r); return true; } //主函数 int main() { //3 4 5 6 7 9999 NBlist DL; NBlist search; //ChaHead(DL); ChaTail(DL); PrintfDL(DL); search = numFind(DL, 3); if (search != NULL) { printf("查找成功结果如下\n"); printf("%3d\n", search->data); } ChaAom(DL, 2, 99); if (true) { printf("插入成功结果如下\n"); PrintfDL(DL); } DelDL(DL, 2); if (true) { printf("删除成功结果如下\n"); PrintfDL(DL); } }
#include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Zlist; typedef struct { Zlist data[MaxSize]; Zlist top; }NBlist; //初始化 void Tof(NBlist& S) { S.top = -1; } //判断是否初始化成功 bool PanList(NBlist& S) { if (S.top == -1) { return true; } return false; } //入栈 bool PutIn(NBlist& S, Zlist x) { if (S.top == MaxSize - 1) { return false; } /*S.top = S.top + 1; S.data[S.top]=x;*/ S.data[++S.top] = x;//S.top=S.top+1 ;S.data[S.top]; return true; } //获取栈顶元素 bool Take(NBlist& S, Zlist& x) { if (S.top == -1) { return false; } x = S.data[S.top]; return true; } //出栈操作 bool OutZhan(NBlist& S, Zlist& x) { if (S.top == -1) { return false; } x = S.data[S.top]; S.top = S.top - 1; return true; } int main() { NBlist S; bool flag; Zlist m; //栈初始化 Tof(S); //判断栈是否为空 flag = PanList(S); if (flag) { printf("栈是空的\n"); } //入栈操作 PutIn(S, 3); PutIn(S, 4); PutIn(S, 5); //获取栈顶元素 flag = Take(S, m); if (flag) { printf("获取栈顶元素为%d\n", m); } //出栈操作 flag = OutZhan(S, m); if (flag) { printf("弹出的元素为%d\n", m); } }
#include <stdio.h>; #include <stdlib.h>; #define MaxSize 5//这个地方一定不要加分号 typedef int EmlyInt; typedef struct { EmlyInt data[MaxSize]; EmlyInt front, rear; }NbList; //初始化 bool NewList(NbList& S) { S.front = S.rear = 0; return true; } //判断是否为空 bool KanList(NbList& S) { if (S.front == S.rear) { return true; } } //入队 bool Inlist(NbList& S, EmlyInt x) { if ((S.rear + 1) % MaxSize == S.front) return false; S.data[S.rear] = x; S.rear = (S.rear + 1) % MaxSize; return true; } //出队 bool Outlist(NbList& S, EmlyInt& m) { if (S.front == S.rear) return false; m = S.data[S.front]; S.front = (S.front + 1) % MaxSize; } int main() { NbList S; bool res; EmlyInt search; NewList(S); //判断 res = KanList(S); if (res) { printf("队列为空\n"); } else { printf("队列不为空"); } //入队 Inlist(S, 3); Inlist(S, 4); Inlist(S, 5); res = Inlist(S, 6); res = Inlist(S, 7); if (res) { printf("入队成功\n"); } else { printf("入队失败\n"); } //出队 res = Outlist(S, search); if (res) { printf("出队成功,元素值为%d\n", search); } else { printf("出队失败\n"); } res = Outlist(S, search); if (res) { printf("出队成功,元素值为%d\n", search); } else { printf("出队失败\n"); } }
#include <stdio.h> #include <stdlib.h> typedef int Elmpey; typedef struct NumList { Elmpey data; struct NumList* next; }NumList; typedef struct { NumList* front; NumList* rear; }LinkQu; //初始化操作 void NewList(LinkQu& S) { S.front = S.rear = (NumList*)malloc(sizeof(NumList)); S.front->next = NULL; } //入队操作 void InList(LinkQu& S, Elmpey x) { NumList* p = (NumList*)malloc(sizeof(NumList)); p->data = x; p->next = NULL; S.rear->next = p; S.rear = p; } //出队操作 bool OutList(LinkQu& S, Elmpey& x) { if (S.front == S.rear) return false; NumList* s = S.front->next; x = s->data; S.front->next = s->next; if (s == S.rear) S.front = S.rear; free(s); return true; } int main() { LinkQu S; bool res; Elmpey ForIn; NewList(S); InList(S, 3); InList(S, 4); InList(S, 5); InList(S, 6); InList(S, 7); res = OutList(S, ForIn); if (res) { printf("出队成功,出队元素为%d", ForIn); } else { printf("出队失败了"); } }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int Fib(int n) { if (n == 0) return 0; else if (n == 1) return 1; else return Fib(n - 1) + Fib(n - 2); } int main() { int num; while (scanf("%d", &num) != EOF) { printf("Fib(%d)=%d\n", num, Fib(num)); } }
#define CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef char BiElemType; typedef struct BiTNode { BiElemType c; struct BiTNode* lchild; struct BiTNode* rchild; }BiTNode, * BiTree; typedef struct tag { BiTree p; struct tag* pnext; }tag_t, * ptag_t; //栈的相关数据结构 #define MaxSize 50 typedef BiTree ElemType; typedef struct { ElemType data[MaxSize]; int top; }SqStack; void InitStack(SqStack& S); bool StackEmpty(SqStack& S); bool Push(SqStack& S, ElemType x); bool Pop(SqStack& S, ElemType& x); bool GetTop(SqStack& S, ElemType& x); //队列的相关数据结构 typedef struct LinkNode { ElemType data; struct LinkNode* next; }LinkNode; typedef struct { LinkNode* front, * rear; }LinkQueue; void InitQueue(LinkQueue& Q); bool IsEmpty(LinkQueue Q); void EnQueue(LinkQueue& Q, ElemType x); bool DeQueue(LinkQueue& Q, ElemType& x);
#include "function.h" //代头结点的队列 void InitQueue(LinkQueue &Q) { Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode)); Q.front->next=NULL; } bool IsEmpty(LinkQueue Q) { if(Q.front==Q.rear) return true; else return false; } void EnQueue(LinkQueue &Q,ElemType x) { LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); s->data=x;s->next=NULL; Q.rear->next=s; Q.rear=s; } bool DeQueue(LinkQueue &Q,ElemType &x) { if(Q.front==Q.rear) return false; LinkNode *p=Q.front->next; x=p->data; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; free(p); return true; }
#include "function.h" void InitStack(SqStack &S) { S.top=-1; } bool StackEmpty(SqStack &S) { if(S.top==-1) return true; else return false; } //入栈 bool Push(SqStack &S,ElemType x) { if(S.top==MaxSize-1) { return false; } S.data[++S.top]=x; return true; } //出栈 bool Pop(SqStack &S,ElemType &x) { if(-1==S.top) return false; x=S.data[S.top--]; return true; } //读取栈顶元素 bool GetTop(SqStack &S,ElemType &x) { if(-1==S.top) return false; x=S.data[S.top]; return true; }
#include "function.h" //递归实现 //abdhiejcfg void preOrder(BiTree p) { if(p!=NULL) { putchar(p->c);//等价于visit函数 preOrder(p->lchild); preOrder(p->rchild); } } //中序遍历 hdibjeafcg void InOrder(BiTree p) { if(p!=NULL) { InOrder(p->lchild); putchar(p->c); InOrder(p->rchild); } } //hidjebfgca void PostOrder(BiTree p) { if(p!=NULL) { PostOrder(p->lchild); PostOrder(p->rchild); putchar(p->c); } } void InOrder2(BiTree T) { SqStack S; InitStack(S);BiTree p=T; while(p||!StackEmpty(S))//逻辑或|| { if(p) { Push(S,p); p=p->lchild; }else{ Pop(S,p);putchar(p->c); p=p->rchild; } } } //层次遍历,广度优先遍历 void LevelOrder(BiTree T) { LinkQueue Q;//定义队列 InitQueue(Q);//初始化带头结点的队列 BiTree p;//树指针 EnQueue(Q,T);//树根入队 while(!IsEmpty(Q))//判断是否为空 { DeQueue(Q,p); putchar(p->c); if(p->lchild!=NULL) EnQueue(Q,p->lchild); if(p->rchild!=NULL) EnQueue(Q,p->rchild); } } #include "function.h" void InitStack(SqStack& S) { S.top = -1; } bool StackEmpty(SqStack& S) { if (S.top == -1) return true; else return false; } //入栈 bool Push(SqStack& S, ElemType x) { if (S.top == MaxSize - 1) { return false; } S.data[++S.top] = x; return true; } //出栈 bool Pop(SqStack& S, ElemType& x) { if (-1 == S.top) return false; x = S.data[S.top--]; return true; } //读取栈顶元素 bool GetTop(SqStack& S, ElemType& x) { if (-1 == S.top) return false; x = S.data[S.top]; return true; } int main() { BiTree pnew; int i,j,pos; char c; BiTree tree=NULL;//树根 ptag_t phead=NULL,ptail=NULL,listpnew,pcur; //abcdefghij while(scanf("%c",&c)!=EOF) { if(c=='\n') { break; } pnew=(BiTree)calloc(1,sizeof(BiTNode)); pnew->c=c; listpnew=(ptag_t)calloc(1,sizeof(tag_t)); listpnew->p=pnew; if(NULL==tree) { tree=pnew;//树的根 phead=listpnew;//队列头 ptail=listpnew;//队列尾 pcur=listpnew; continue; }else{ ptail->pnext=listpnew;//新结点放入链表,通过尾插法 ptail=listpnew;//ptail指向队列尾部 }//pcur始终指向要插入的结点的位置 if(NULL==pcur->p->lchild)//如何把新结点放入树 { pcur->p->lchild=pnew;//把新结点放到要插入结点的左边 }else if(NULL==pcur->p->rchild) { pcur->p->rchild=pnew;//把新结点放到要插入结点的右边 pcur=pcur->pnext;//左右都放了结点后,pcur指向队列的下一个 } } printf("--------前序遍历----------\n"); preOrder(tree); printf("\n--------中序遍历------------\n"); InOrder(tree); printf("\n--------后序遍历------------\n"); PostOrder(tree); printf("\n--------中序遍历非递归------\n"); InOrder2(tree); printf("\n--------层次遍历-----------\n"); LevelOrder(tree); printf("\n"); system("pause"); }
#include <stdio.h> #include <stdlib.h> typedef int KeyType; typedef struct BSTNode { KeyType key; struct BSTNode* lchild, * rchild; }BSTNode, * Bitree; //辅助函数 int BST_Insert(Bitree& T, KeyType x) { if (T == NULL) { T = (Bitree)malloc(sizeof(BSTNode)); T->key = x; T->lchild = T->rchild = NULL; return 1; } else if (T->key == x) return 0; else if (T->key > x) { return BST_Insert(T->lchild, x); } else { return BST_Insert(T->rchild, x); } } //创建 void Creat_BST(Bitree& T, KeyType str[], int n) { T = NULL; int i = 0; while (i < n) { BST_Insert(T, str[i]); i++; } } //删除操作 void DeleteNode(Bitree& root, KeyType x) { if (root->key == NULL)//树根为空 return; if (root->key > x) { DeleteNode(root->lchild, x); } else if (root->key < x) { DeleteNode(root->rchild, x); } else { if (root->lchild == NULL) { Bitree tempNode = root; root = root->rchild; free(tempNode); } else if (root->rchild == NULL) { Bitree tempNode = root; root = root->lchild; free(tempNode); } else { Bitree tempNode = root->lchild; if (tempNode->rchild != NULL) { tempNode = tempNode->rchild; } root->key = tempNode->key; DeleteNode(root->lchild, tempNode->key); } } } //查找 BSTNode* BST_Search(Bitree T, KeyType k, Bitree& p) { p = NULL; while (T != NULL && k != T->key) { p = T; if (k < T->key) T = T->lchild; else T = T->rchild; } return T; } //中序遍历 int InOrder(Bitree& T) { if (T != NULL) { InOrder(T->lchild); printf("%3d", T->key); InOrder(T->rchild); } return 1; } //主函数 int main() { //定义 Bitree T = NULL; Bitree parent; Bitree search; KeyType str[7] = { 54,20,66,40,28,79,58 }; //创建 Creat_BST(T, str, 7); //中序遍历 InOrder(T); printf("\n"); //查找 search = BST_Search(T, 40, parent); if (search) { printf("查找成功,查找到的值=%d\n", search->key); } else { printf("查找失败\n"); } //删除 DeleteNode(T, 66); InOrder(T); printf("\n"); }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> typedef int ElemType; //定义 typedef struct { ElemType* elem; int TableLen; }SStable; //生成随机数 void ST_lnit(SStable& ST, int x) { ST.TableLen = x + 1; ST.elem = (ElemType*)malloc(sizeof(ElemType) * ST.TableLen); int i; srand(time(NULL));//随机数生成 for (i = 0; i < ST.TableLen; i++) { ST.elem[i] = rand() % 100; } } //打印 void ST_print(SStable& ST) { for (int i = 0; i < ST.TableLen; i++) { printf("%3d", ST.elem[i]); } printf("\n"); } //查找 int Search_Seq(SStable ST, ElemType key) { ST.elem[0] = key;//哨兵 int i; for (i = ST.TableLen - 1; ST.elem[i] != key; --i); return i; } //比较规则 int compare(const void* left, const void* right) { return *(ElemType*)left - *(ElemType*)right; } //二分查找 int Binary_Search(SStable ST, ElemType key) { int low = 0, high = ST.TableLen - 1, mid; while (low <= high) { mid = (low + high) / 2; if (ST.elem[mid] == key) return mid; else if (ST.elem[mid] > key) high = mid + 1; else low = mid + 1; } return -1; } //主函数 int main() { SStable ST; ElemType key; int pos; //生成随机数 ST_lnit(ST, 10); ST_print(ST); //查找 printf("请输入要搜索的key值\n"); scanf("%d", &key); pos = Search_Seq(ST, key); if (key) { printf("查找成功,位置是%d\n", pos); } else { printf("查找失败"); } //折半查找 qsort(ST.elem, ST.TableLen, sizeof(ElemType), compare); ST_print(ST); printf("二分查找,请输入要搜索的key值\n"); scanf("%d", &key); pos = Binary_Search(ST, key); if (pos != -1) { printf("查找成功,位置是%d\n", pos); } else { printf("查找失败\n", pos); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。