赞
踩
- #include<stdio.h>
- #include<malloc.h>
- #define OK 1
- #define ERROR 0
- #define LIST_INIT_SIZE 100
- #define LISTINCREMENT 10
- #define ElemType int
-
- typedef struct
- {
- int *elem;
- int length;
- int listsize;
- }SqList;
-
- int InitList_Sq(SqList &L)
- {
- // 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE
- // 请补全代码
- L.elem=new ElemType[LIST_INIT_SIZE];
- if(!L.elem) return 1;
- L.length=0;
- L.listsize=LIST_INIT_SIZE;
- return 0;
-
- }
-
- int Load_Sq(SqList &L)
- {
- // 输出顺序表中的所有元素
- int i;
- if(L.length==0) printf("The List is empty!"); // 请填空
- else
- {
- printf("The List is: ");
- for(i=0;i<L.length;i++) printf("%d ",L.elem[i]); // 请填空
- }
- printf("\n");
- return OK;
- }
-
- int ListInsert_Sq(SqList &L,int i,int e)
- {
- // 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e
- // i的合法值为1≤i≤L.length +1
- // 请补全代码
- if(i<1||i>L.length+1)
- return 1;
- else
- {
- for(int j=L.length-1;j>=i-1;j--)
- {
- L.elem[j+1]=L.elem[j];
- }
- L.elem[i-1]=e;
- ++L.length;
- return 0;
- }
-
- }
-
- int ListDelete_Sq(SqList &L,int i, int &e)
- {
- // 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值
- // i的合法值为1≤i≤L.length
- // 请补全代码
- if(i<1||i>L.length)
- return 1;
- else
- {
- e=L.elem[i-1];
- for(int j=i-1;j<=L.length-1;j++)
- {
- L.elem[j]=L.elem[j+1];
- }
- L.length--;
- return 0;
- }
- }
-
- int main()
- {
- SqList T;
- int a, i;
- ElemType e, x;
- if(!InitList_Sq(T)) // 判断顺序表是否创建成功
- {
- printf("A Sequence List Has Created.\n");
- }
- while(1)
- {
- printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
- scanf("%d",&a);
- switch(a)
- {
- case 1: scanf("%d%d",&i,&x);
- if(ListInsert_Sq(T,i,x)) printf("Insert Error!\n"); // 执行插入函数,根据返回值判断i值是否合法
- else printf("The Element %d is Successfully Inserted!\n", x);
- break;
- case 2: scanf("%d",&i);
- if(ListDelete_Sq(T,i,e)) printf("Delete Error!\n"); // 执行删除函数,根据返回值判断i值是否合法
- else printf("The Element %d is Successfully Deleted!\n", e);
- break;
- case 3: Load_Sq(T);
- break;
- case 0: return 1;
- }
- }
- }
- #include <stdio.h>
- #include <malloc.h>
- #include <iostream>
- using namespace std;
- #define OK 1
- #define ERROR 0
- #define ElemType int
- #define LIST_INIT_SIZE 100
- typedef int Status;
-
- typedef struct
- {
- int *elem;
- int length;
- int listsize;
- }SqList;
-
- Status InitList_Sq(SqList &L)
- {
- L.elem=new ElemType[LIST_INIT_SIZE];
- if(!L.elem) return ERROR;
- L.length=0;
- L.listsize=LIST_INIT_SIZE;
- return OK;
- }
-
- Status CreatList_Sq(SqList &L,int n)
- {
- if(!InitList_Sq(L)) return ERROR;
- for(int i=0;i<n;i++)
- {
- cin>>L.elem[i];
- L.length++;
- }
- return OK;
- }
-
- Status PrintList_Sq(SqList L)
- {
- if(L.length==0)
- cout<<'The List is empty!';
- int i;
- for(i=0;i<L.length;i++)
- {
- cout<<L.elem[i]<<' ';
- }
- cout<<endl;
- return OK;
- }
-
- Status MergeList_Sq(SqList LA,SqList LB,SqList &LC)
- {
- int *pa,*pb,*pc,*pa_last,*pb_last;
- LC.length=LA.length+LB.length;
- LC.elem=new ElemType[LC.length];
- pc=LC.elem;
- pa=LA.elem;
- pb=LB.elem;
- pa_last=LA.elem+LA.length-1;
- pb_last=LB.elem+LB.length-1;
- while(pa<=pa_last&&pb<=pb_last)
- {
- if((*pa)<=(*pb))
- *pc++=*pa++;
- else
- *pc++=*pb++;
- }
- while(pa<=pa_last) *pc++=*pa++;
- while(pb<=pb_last) *pc++=*pb++;
- }
-
-
-
-
-
-
- int main()
- {
- SqList A,B,C;
- int n,m;
- InitList_Sq(A);
- InitList_Sq(B);
- InitList_Sq(C);
- cin>>n;
- CreatList_Sq(A,n);
- cin>>m;
- CreatList_Sq(B,m);
- cout<<"List A:";
- PrintList_Sq(A);
- cout<<"List B:";
- PrintList_Sq(B);
- MergeList_Sq(A,B,C);
- cout<<"List C:";
- PrintList_Sq(C);
- return 0;
-
- }
- #include<stdio.h>
- #include<malloc.h>
- #include<iostream>
- #define OK 1
- #define ERROR 0
- #define LIST_INIT_SIZE 100
- #define LISTINCREMENT 10
- #define ElemType int
-
- using namespace std;
-
- typedef int Status;
- typedef struct
- {
- int *elem;
- int length;
- int listsize;
- }SqList;
-
- Status InitList_Sq(SqList &L)
- { // 算法2.3
- // 构造一个空的线性表L。
- L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
- if (!L.elem) return OK; // 存储分配失败
- L.length = 0; // 空表长度为0
- L.listsize = LIST_INIT_SIZE; // 初始存储容量
- return OK;
- } // InitList_Sq
-
- Status ListInsert_Sq(SqList &L, int i, ElemType e)
- { // 算法2.4
- // 在顺序线性表L的第i个元素之前插入新的元素e,
- // i的合法值为1≤i≤ListLength_Sq(L)+1
- ElemType *p;
- if (i < 1 || i > L.length+1) return ERROR; // i值不合法
- if (L.length >= L.listsize) { // 当前存储空间已满,增加容量
- ElemType *newbase = (ElemType *)realloc(L.elem,
- (L.listsize+LISTINCREMENT)*sizeof (ElemType));
- if (!newbase) return ERROR; // 存储分配失败
- L.elem = newbase; // 新基址
- L.listsize += LISTINCREMENT; // 增加存储容量
- }
- ElemType *q = &(L.elem[i-1]); // q为插入位置
- for (p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p;
- // 插入位置及之后的元素右移
- *q = e; // 插入e
- ++L.length; // 表长增1
- return OK;
- } // ListInsert_Sq
-
- Status ListDelete_Sq(SqList &L, int i, ElemType &e)
- { // 算法2.5
- // 在顺序线性表L中删除第i个元素,并用e返回其值。
- // i的合法值为1≤i≤ListLength_Sq(L)。
- ElemType *p, *q;
- if (i<1 || i>L.length) return ERROR; // i值不合法
- p = &(L.elem[i-1]); // p为被删除元素的位置
- e = *p; // 被删除元素的值赋给e
- q = L.elem+L.length-1; // 表尾元素的位置
- for (++p; p<=q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移
- --L.length; // 表长减1
- return OK;
- } // ListDelete_Sq
-
- Status CreatList_Sq(SqList &L,int n)
- {
- if(!InitList_Sq(L)) return ERROR;
- for(int i=0;i<n;i++)
- {
-
- cin>>L.elem[i];
- L.length++;
-
- }
- return OK;
- }
-
- Status PrintList_Sq(SqList L)
- {
- for(int i=0;i<L.length;i++)
- {
- cout<<L.elem[i]<<' ';
- }
- cout<<endl;
- return OK;
- }
- Status DaozhiList_Sq(SqList &L)
- {
- ElemType p;
-
- for(int n=0;n<L.length/2;n++)
- {
- p=L.elem[n];
- L.elem[n]=L.elem[L.length-1-n];
- L.elem[L.length-1-n]=p;
-
-
- }
- return OK;
- }
-
- int main()
- {
- ElemType n;
- SqList T;
- InitList_Sq(T);
- cin>>n;
- CreatList_Sq(T,n);
- cout<<"The List is:";
- PrintList_Sq(T);
- DaozhiList_Sq(T);
- cout<<"The turned List is:";
- PrintList_Sq(T);
- return 0;
- }
- #include<stdio.h>
- #include<malloc.h>
- #include<iostream>
- #define ERROR 0
- #define OK 1
- #define ElemType int
- using namespace std;
-
- typedef struct LNode
- {
- int data;
- struct LNode *next;
- }LNode,*LinkList;
-
- int CreateLink_L(LinkList &L,int n){
- // 创建含有n个元素的单链表
- LinkList p,q;
- int i;
- ElemType e;
- L = new LNode;
- L->next = NULL; // 先建立一个带头结点的单链表
- q = L;
- for (i=0; i<n; i++) {
- scanf("%d", &e);
- p = new LNode; // 生成新结点
- p->data=e;
- p->next=NULL;
- q->next=p;
- q=p;// 请补全代码
-
- }
- return OK;
- }
-
- int LoadLink_L(LinkList &L){
- // 单链表遍历
- LinkList p = L->next;
- if(!p)printf("The List is empty!"); // 请填空
- else
- {
- printf("The LinkList is:");
- while(p!=NULL) // 请填空
- {
- printf("%d ",p->data);
- p=p->next; // 请填空
- }
- }
- printf("\n");
- return OK;
- }
-
- int LinkInsert_L(LinkList &L,int i,ElemType e){
- // 算法2.9
- // 在带头结点的单链线性表L中第i个位置之前插入元素e
- // 请补全代码
- LinkList p=L,s;
- int j=0;
- while(p&&j<i-1)
- {
- p=p->next;
- j++;
- }
- if(!p||j>i-1) return ERROR;
- s=new LNode;
- s->data=e;
- s->next=p->next;
- p->next=s;
- return OK;
- }
-
- int LinkDelete_L(LinkList &L,int i, ElemType &e){
- // 算法2.10
- // 在带头结点的单链线性表L中,删除第i个元素,并用e返回其值
- // 请补全代码
-
- LinkList p=L,t;
- int j=0;
- while(p->next&&j<i-1)
- {
- p=p->next;
- j++;
- }
- if(!p->next||j>i-1) return ERROR;
- t=p->next;
- e=t->data;
- p->next=t->next;
- delete t;
- return OK;
-
-
- }
-
- int main()
- {
- LinkList T;
- int a,n,i;
- ElemType x, e;
- printf("Please input the init size of the linklist:\n");
- scanf("%d",&n);
- printf("Please input the %d element of the linklist:\n", n);
- if(CreateLink_L(T,n)) // 判断链表是否创建成功,请填空
- {
- printf("A Link List Has Created.\n");
- LoadLink_L(T);
- }
- while(1)
- {
- printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
- scanf("%d",&a);
- switch(a)
- {
- case 1: scanf("%d%d",&i,&x);
- if(!LinkInsert_L(T,i,x)) printf("Insert Error!\n"); // 判断i值是否合法,请填空
- else printf("The Element %d is Successfully Inserted!\n", x);
- break;
- case 2: scanf("%d",&i);
- if(!LinkDelete_L(T,i,e)) printf("Delete Error!\n"); // 判断i值是否合法,请填空
- else printf("The Element %d is Successfully Deleted!\n", e);
- break;
- case 3: LoadLink_L(T);
- break;
- case 0: return 1;
- }
- }
- }
- #include<stdio.h>
- #include<malloc.h>
- #define ERROR 0
- #define OK 1
- #define ElemType int
- #include<iostream>
- using namespace std;
- typedef int Status;
- typedef struct LNode
- {
- int data;
- struct LNode *next;
- }LNode,*LinkList;
-
- Status CreatLinkList_L(LinkList &L,int n)
- {
- LinkList p,q;
- ElemType e;
- L=new LNode;
- L->next=NULL;
- q=L;
- while(n--)
- {
- cin>>e;
- p=new LNode;
- p->data=e;
- p->next=NULL;
- q->next=p;
- q=p;
- }
- return OK;
- }
- Status ListInsert_L(LinkList &L, int i, ElemType e) { // 算法2.9
- // 在带头结点的单链线性表L的第i个元素之前插入元素e
- LinkList p,s;
- p = L;
- int j = 0;
- while (p && j < i-1) { // 寻找第i-1个结点
- p = p->next;
- ++j;
- }
- if (!p || j > i-1) return ERROR; // i小于1或者大于表长
- s = (LinkList)malloc(sizeof(LNode)); // 生成新结点
- s->data = e; s->next = p->next; // 插入L中
- p->next = s;
- return OK;
- } // LinstInsert_L
-
- Status ListDelete_L(LinkList &L, int i, ElemType &e) { // 算法2.10
- // 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
- LinkList p,q;
- p = L;
- int j = 0;
- while (p->next && j < i-1) { // 寻找第i个结点,并令p指向其前趋
- p = p->next;
- ++j;
- }
- if (!(p->next) || j > i-1) return ERROR; // 删除位置不合理
- q = p->next;
- p->next = q->next; // 删除并释放结点
- e = q->data;
- free(q);
- return OK;
- } // ListDelete_L
-
- Status MergeList_L(LinkList LA,LinkList LB,LinkList &LC)
- {
- LinkList la,lb,lc;
- LC=new LNode;
- la=LA->next;
- lb=LB->next;
- lc=LC=LA;
- while(la&&lb)
- {
- if(la->data<lb->data)
- {
- lc->next=la;
- lc=la;
- la=la->next;
- }
- else
- {
- lc->next=lb;
- lc=lb;
- lb=lb->next;
- }
-
- }
- if(la&&!lb) {lc->next=la;}
- if(!la&&lb) lc->next=lb;
- return OK;
- }
-
- Status PrintList_L(LinkList L)
- {
- LinkList p=L;
- if(p->next==NULL) return ERROR;
- while(p->next)
- {
- p=p->next;
- cout<<p->data<<' ';
- }
- cout<<endl;
- return OK;
- }
- int main()
- {
- int n;
- LinkList A,B,C;
- cin>>n;
- CreatLinkList_L(A,n);
- cin>>n;
- CreatLinkList_L(B,n);
- cout<<"List A:";
- PrintList_L(A);
- cout<<"List B:";
- PrintList_L(B);
- MergeList_L(A,B,C);
- cout<<"List C:";
- PrintList_L(C);
- return 0;
- }
-
- #include <iostream>//C++
- using namespace std;
- struct LNode
- {
- int data;
- LNode * next;
- };
- void createList(LNode * &L,int n)
- {
- //< 尾插法创建单链表
- LNode *r, *p;
- r=L=new LNode;//< 创建头结点
- L->next=NULL;
- for(int i=1; i<=n; i++)
- {
- p=new LNode;
- cin>>p->data;
- p->next=NULL;
- r->next=p;
- r=p;
- }
- }
- void trv(LNode * L)
- {
- //< 一个简单的链表遍历函数,供编程过程中测试使用
- L=L->next;
- while(L)
- {
- cout<<L->data<<' ';
- L=L->next;
- }
- }
- void reverseList(LNode * &L)
- {
- LNode *pre=NULL,*cur=L->next,*nex=NULL;
- while(cur)
- {
- nex=cur->next;
- cur->next=pre;
- pre=cur;
- cur=nex;
- }
- L->next=pre;
- }
- int main()
- {
- int n;
- LNode *L;
- cin>>n;
- createList(L,n);
- reverseList(L);
- trv(L);
- return 0;
- }
- #include<malloc.h>
- #include<stdio.h>
- #define OK 1
- #define ERROR 0
- #define STACK_INIT_SIZE 100 // 存储空间初始分配量
- #define STACKINCREMENT 10 // 存储空间分配增量
-
- typedef int SElemType; // 定义栈元素类型
- typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
-
- struct SqStack
- {
- SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
- SElemType *top; // 栈顶指针
- int stacksize; // 当前已分配的存储空间,以元素为单位
- }; // 顺序栈
-
- Status InitStack(SqStack &S)
- {
- // 构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE
- // 请补全代码
- S.base=new SElemType[STACK_INIT_SIZE];
- if(!S.base) return ERROR;
- S.top=S.base;
- S.stacksize=STACK_INIT_SIZE;
- return OK;
- }
-
- Status Push(SqStack &S,SElemType e)
- {
- // 在栈S中插入元素e为新的栈顶元素
- // 请补全代码
- if(S.top-S.base==STACK_INIT_SIZE) return ERROR;
- *S.top++=e;
- return OK;
-
- }
-
- Status Pop(SqStack &S,SElemType &e)
- {
- // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
- // 请补全代码
- if(!(S.top==S.base))
- {
- e=*--S.top;
- return OK;
- }
- else return ERROR;
-
- }
-
- Status GetTop(SqStack S,SElemType &e)
- {
- // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
- // 请补全代码
- if(S.top==S.base) return ERROR;
- e=*(S.top-1);
- return OK;
-
- }
-
- int StackLength(SqStack S)
- {
- // 返回栈S的元素个数
- // 请补全代码
- return (S.top-S.base);
-
- }
-
- Status StackTraverse(SqStack S)
- {
- // 从栈顶到栈底依次输出栈中的每个元素
- SElemType *p = S.top; //请填空
- if(S.top==S.base)printf("The Stack is Empty!"); //请填空
- else
- {
- printf("The Stack is: ");
- while(p!=S.base) //请填空
- {
- p--;//请填空
- printf("%d ", *p);
-
- }
- }
- printf("\n");
- return OK;
- }
-
- int main()
- {
- int a;
- SqStack S;
- SElemType x, e;
- if(InitStack(S)) // 判断顺序表是否创建成功,请填空
- {
- printf("A Stack Has Created.\n");
- }
- while(1)
- {
- printf("1:Push \n2:Pop \n3:Get the Top \n4:Return the Length of the Stack\n5:Load the Stack\n0:Exit\nPlease choose:\n");
- scanf("%d",&a);
- switch(a)
- {
- case 1: scanf("%d", &x);
- if(!Push(S,x)) printf("Push Error!\n"); // 判断Push是否合法,请填空
- else printf("The Element %d is Successfully Pushed!\n", x);
- break;
- case 2: if(!Pop(S,e)) printf("Pop Error!\n"); // 判断Pop是否合法,请填空
- else printf("The Element %d is Successfully Poped!\n", e);
- break;
- case 3: if(!GetTop(S,e))printf("Get Top Error!\n"); // 判断Get Top是否合法,请填空
- else printf("The Top Element is %d!\n", e);
- break;
- case 4: printf("The Length of the Stack is %d!\n",StackLength(S)); //请填空
- break;
- case 5: StackTraverse(S); //请填空
- break;
- case 0: return 1;
- }
- }
- }
- #include<malloc.h>
- #include<stdio.h>
- #define OK 1
- #define ERROR 0
- typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
- typedef int QElemType;
- #define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要减1)
-
- typedef struct
- {
- QElemType *base; // 初始化的动态分配存储空间
- int front; // 头指针,若队列不空,指向队列头元素
- int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
- }SqQueue;
-
- Status InitQueue(SqQueue &Q)
- {
- // 构造一个空队列Q,该队列预定义大小为MAXQSIZE
- // 请补全代码
- Q.base=new QElemType[MAXQSIZE];
- if(!Q.base) return ERROR;
- Q.front=Q.rear=0;
- return OK;
-
- }
-
- Status EnQueue(SqQueue &Q,QElemType e)
- {
- // 插入元素e为Q的新的队尾元素
- // 请补全代码
- if((Q.rear+1)%MAXQSIZE==Q.front)
- return ERROR;
- Q.base[Q.rear]=e;
- Q.rear=(Q.rear+1)%MAXQSIZE;
- return OK;
- }
-
- Status DeQueue(SqQueue &Q, QElemType &e)
- {
- // 若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR
- // 请补全代码
- if(Q.front==Q.rear) return ERROR;
- e=Q.base[Q.front];
- Q.front=(Q.front+1)%MAXQSIZE;
- return OK;
-
- }
-
- Status GetHead(SqQueue Q, QElemType &e)
- {
- // 若队列不空,则用e返回队头元素,并返回OK,否则返回ERROR
- // 请补全代码
- if(Q.front==Q.rear) return ERROR;
- e=Q.base[Q.front];
- return OK;
-
- }
-
- int QueueLength(SqQueue Q)
- {
- // 返回Q的元素个数
- // 请补全代码
- return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
-
- }
-
- Status QueueTraverse(SqQueue Q)
- {
- // 若队列不空,则从队头到队尾依次输出各个队列元素,并返回OK;否则返回ERROR.
- int i;
- i=Q.front;
- if(Q.rear==Q.front)printf("The Queue is Empty!"); //请填空
- else{
- printf("The Queue is: ");
- while(i!=Q.rear) //请填空
- {
- printf("%d ",Q.base[i] ); //请填空
- i = (i+1)%MAXQSIZE; //请填空
- }
- }
- printf("\n");
- return OK;
- }
-
- int main()
- {
- int a;
- SqQueue S;
- QElemType x, e;
- if(InitQueue(S)) // 判断顺序表是否创建成功,请填空
- {
- printf("A Queue Has Created.\n");
- }
- while(1)
- {
- printf("1:Enter \n2:Delete \n3:Get the Front \n4:Return the Length of the Queue\n5:Load the Queue\n0:Exit\nPlease choose:\n");
- scanf("%d",&a);
- switch(a)
- {
- case 1: scanf("%d", &x);
- if(!EnQueue(S,x)) printf("Enter Error!\n"); // 判断入队是否合法,请填空
- else printf("The Element %d is Successfully Entered!\n", x);
- break;
- case 2: if(!DeQueue(S,e)) printf("Delete Error!\n"); // 判断出队是否合法,请填空
- else printf("The Element %d is Successfully Deleted!\n", e);
- break;
- case 3: if(!GetHead(S,e))printf("Get Head Error!\n"); // 判断Get Head是否合法,请填空
- else printf("The Head of the Queue is %d!\n", e);
- break;
- case 4: printf("The Length of the Queue is %d!\n",QueueLength(S)); //请填空
- break;
- case 5: QueueTraverse(S); //请填空
- break;
- case 0: return 1;
- }
- }
- }
- #include<iostream>
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- #define OK 1
- #define ERROR 0
- #define StackInitSize 100
- typedef int Status;
- typedef int SElemType;
-
- using namespace std;
- struct SqStack
- {
- SElemType *base;
- SElemType *top;
- int stacksize;
- };
-
- Status CreateStack_S(SqStack &S)
- {
- S.base=new SElemType[StackInitSize];
- if(!S.base) return ERROR;
- S.top=S.base;
- S.stacksize=StackInitSize;
- return OK;
- }
-
- Status PoPStack_S(SqStack &S,SElemType x)
- {
- if(S.top-S.base==StackInitSize) return ERROR;
- *S.top++=x;
- return OK;
- }
-
- Status PushStack_S(SqStack &S,SElemType e)
- {
- if(S.top==S.base) return ERROR;
- e=*--S.top;
- return OK;
- }
-
- Status StackTraverse(SqStack S)
- {
- // 从栈顶到栈底依次输出栈中的每个元素
- SElemType *p = S.top; //请填空
- if(S.top==S.base)return ERROR;
-
- while(p!=S.base) //请填空
- {
- p--;//请填空
- printf("%d", *p);
-
- }
-
- return OK;
- }
- void Transnum8(SqStack &S,int n)
- {
- int a,b;
- while(n)
- {
- a=n%8;
- PoPStack_S(S,a);
- n=n/8;
- }
- StackTraverse(S);
- }
- int main()
- {
- SqStack S;
- SElemType x,e;
- CreateStack_S(S);
- int n;
- cin>>n;
- Transnum8(S,n);
- return 0;
- }
- typedef char SElemType;
- #include"malloc.h"
- #include"stdio.h"
- #include"math.h"
- #include"stdlib.h" // exit()
- #define OK 1
- #define ERROR 0
- #define TRUE 1
- #define FALSE 0
- typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
- #define STACK_INIT_SIZE 10 // 存储空间初始分配量
- #define STACKINCREMENT 2 // 存储空间分配增量
- struct SqStack
- {
- SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
- SElemType *top; // 栈顶指针
- int stacksize; // 当前已分配的存储空间,以元素为单位
- }; // 顺序栈
- Status InitStack(SqStack &S)
- {
- S.base=new SElemType[STACK_INIT_SIZE];
- if(!S.base) return ERROR;
- S.top=S.base;
- S.stacksize=STACK_INIT_SIZE;
- return OK;
- }
-
- Status StackEmpty(SqStack S)
- {
- if(S.top==S.base)
- return OK;
- else
- return 0;
- }
- Status Push(SqStack &S,SElemType &e)
- {
- if(S.top==S.base) return ERROR;
- e=*--S.top;
- return OK;
- }
- Status Pop(SqStack &S,SElemType e)
- {
- if(S.top-S.base==S.stacksize) return ERROR;
- *S.top++=e;
- return OK;
- }
- void check()
- { // 对于输入的任意一个字符串,检验括号是否配对
- SqStack s;
- SElemType ch[80],*p,e;
- if(InitStack(s)) // 初始化栈成功
- {
- //printf("请输入表达式\n");
- gets(ch);
- p=ch;
- while(*p) // 没到串尾
- {
-
- switch(*p)
- {
- case '(':
- case '[':Pop(s,*p++);
- break; // 左括号入栈,且p++
- case ')':
- case ']':if(!StackEmpty(s)) // 栈不空
- {
- Push(s,e); // 弹出栈顶元素
- if(*p==')'&&e!='('||*p==']'&&e!='[')
-
- // 弹出的栈顶元素与*p不配对
- {
- printf("isn't matched pairs\n");
- exit(ERROR);
- }
- else
- {
- p++;
- break; // 跳出switch语句
- }
- }
- else // 栈空
- {
- printf("lack of left parenthesis\n");
- exit(ERROR);
- }
- default: p++; // 其它字符不处理,指针向后移
- }
- }
- if(StackEmpty(s)) // 字符串结束时栈空
- printf("matching\n");
- else
- printf("lack of right parenthesis\n");
- }
- }
- int main()
- {
- check();
- }
- typedef char SElemType;
- #include"malloc.h"
- #include"stdio.h"
- #include"math.h"
- #include"stdlib.h" // exit()
- #define OK 1
- #define ERROR 0
- #define TRUE 1
- #define FALSE 0
- typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
- #define STACK_INIT_SIZE 100 // 存储空间初始分配量
- #define STACKINCREMENT 2 // 存储空间分配增量
- struct SqStack
- {
- SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
- SElemType *top; // 栈顶指针
- int stacksize; // 当前已分配的存储空间,以元素为单位
- }; // 顺序栈
-
- Status InitStack(SqStack &S)
- { // 构造一个空栈S
- S.base=new SElemType[STACK_INIT_SIZE];
- if(!S.base) return ERROR;
- S.top=S.base;
- S.stacksize=STACK_INIT_SIZE;
- return OK;
- }
- Status StackEmpty(SqStack S)
- { // 若栈S为空栈,则返回TRUE,否则返回FALSE
- if(S.top==S.base) return TRUE;
- else return FALSE;
- }
- Status ClearStack(SqStack &S)
- { // 把S置为空栈
- S.top=S.base;
- return OK;
- }
- Status DestroyStack(SqStack &S)
- { // 销毁栈S,S不再存在
- free(S.base);
- S.base=NULL;
- S.top=NULL;
- S.stacksize=0;
- return OK;
- }
- Status Push(SqStack &S,SElemType e)
- { // 插入元素e为新的栈顶元素
- if(S.top-S.base==S.stacksize) return ERROR;
- *S.top++=e;
- return OK;
-
- }
- Status Pop(SqStack &S,SElemType &e)
- { // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
- if(S.top!=S.base)
- {
- e=*--S.top;
- return OK;
- }
- else return ERROR;
-
- }
- Status StackTraverse(SqStack S,Status(*visit)(SElemType))
- { // 从栈底到栈顶依次对栈中每个元素调用函数visit()。
- // 一旦visit()失败,则操作失败
- while(S.top>S.base)
- visit(*S.base++);
- printf("\n");
- return OK;
- }
- Status visit(SElemType c)
- {
- printf("%c",c);
- return OK;
- }
- void LineEdit()
- { // 利用字符栈s,从终端接收一行并送至调用过程的数据区。算法3.2
- SqStack s;
- char ch,c;
- int n,i;
- InitStack(s);
- scanf("%d",&n);
- ch=getchar();
- for(i=1;i<=n;i++)
- { ch=getchar();
- while(ch!='\n')
- {
- switch(ch)
- {
- case '#':Pop(s,c);
- break; // 仅当栈非空时退栈
- case '@':ClearStack(s);
- break; // 重置s为空栈
- default :Push(s,ch); // 有效字符进栈
- }
- ch=getchar(); // 从终端接收下一个字符
- }
- StackTraverse(s,visit); // 将从栈底到栈顶的栈内字符输出
- ClearStack(s); // 重置s为空栈
- }
- DestroyStack(s);
- }
- int main()
- {
- LineEdit();
- return 0;
- }
- //汉诺塔问题,打印的是整个的移动过程
- #include <stdio.h>
-
-
- void hanoi(int n, char A, char B, char C)//n个圈圈在柱子A上,借助柱子B,移动到柱子C上
- {
- if (n == 1)//如果A柱子上只有一个圈圈,直接移动到B上
- printf("%c->%d->%c\n", A,n, B);
- else
- {
- hanoi(n - 1, A, C, B);//将A柱子上的n-1个圈圈,借助柱子B,移动到柱子C上
- printf("%c->%d->%c\n", A, n,B);//将A柱子上的最后一个圈圈移动到柱子B上
- hanoi(n - 1, C, B, A);//将C柱子上的n-1个圈圈,借助柱子A,移动到柱子B上
- }
- }
-
- int main()
- {
- int n;
- char a, b, c;
-
-
- scanf("%d %c %c %c",&n,&a,&b,&c);
- if (n >= 20||n<=0) {
- return 0;
- }
- hanoi(n, a, b, c);
- return 0;
- }
- #include<iostream>
- #include<algorithm>
-
- using namespace std;
-
- int akm(int m,int n){
- if(m==0){
- return n+1;
- }else if(m>0&&n==0){
- return akm(m-1,1);
- }else if(m>0&&n>0){
- return akm(m-1,akm(m,n-1));
- }
- }
-
- int main(){
- int n,m;
- cin>>m>>n;
- cout<<akm(m,n);
- return 0;
- }
- #include "stdio.h"
- #include "stdlib.h"
- #include "iostream"
- #define MAXSTRLEN 255 // 用户可在255以内定义最大串长
- typedef unsigned char SString[MAXSTRLEN+1]; // 0号单元存放串的长度
-
- void get_next(SString T,int next[]){
- // 算法4.7
- // 求模式串T的next函数值并存入数组next
- // 请补全代码
- int i=1;
- next[1]=0;
- int j=0;
- while(i<=T[0])
- {
- if(j==0||T[i]==T[j])
- {
- ++i;++j;
- next[i]=j;
- }
- else j=next[j];
- }
- }
- int main(){
- int next[MAXSTRLEN];
- SString S;
- int n,i,j;
- char ch;
- scanf("%d",&n); // 指定要验证NEXT值的字符串个数
- ch=getchar();
- for(i=1;i<=n;i++)
- {
- ch=getchar();
- for(j=1;j<=MAXSTRLEN&&(ch!='\n');j++) // 录入字符串
- {
- S[j]=ch;
- ch=getchar();
- }
- S[0]=j-1; // S[0]用于存储字符串中字符个数
- get_next(S,next);
- printf("NEXT J is:");
- for(j=1;j<=S[0];j++)
- printf("%d",next[j]);
- printf("\n");
- }
-
- return 0;
- }
- #include "stdio.h"
- #include "stdlib.h"
- #include "iostream"
- #define TRUE 1
- #define FALSE 0
- #define OK 1
- #define ERROR 0
- #define INFEASLBLE -1
- #define OVERFLOW -2
- #define MAXSTRLEN 255 //用户可在255以内定义最大串长
- typedef unsigned char SString[MAXSTRLEN+1]; //0号单元存放串的长度
-
- void get_next(SString T,int next[]){
- // 算法4.7
- // 求模式串T的next函数值并存入数组next
- // 请补全代码
- int i=1,j=0;
- next[1]=0;
- while(i<=T[0])
- {
- if(j==0||T[i]==T[j])
- {
- ++i;++j;
- next[i]=j;
- }
- else
- j=next[j];
- }
-
- }
-
- int Index_KMP(SString S,SString T,int pos,int next[]){
- // 算法4.6
- // 利用模式串T的next函数求T在主串S中第pos个字符之后的位置
- // KMP算法。请补全代码
- int i=pos;
- int j=1;
- while(i<=S[0]&&j<=T[0])
- {
- if(j==0||S[i]==T[j])
- {
- ++j;
- ++i;
- }
- else
- j=next[j];
- }
- if(j>T[0]) return i-T[0];
- else return 0;
-
- }
- int main()
- {
- SString T,S;
- int i,j,n;
- char ch;
- int pos;
- int next[MAXSTRLEN];
- scanf("%d",&n); // 指定n对需进行模式匹配的字符串
- ch=getchar();
- for(j=1;j<=n;j++)
- {
- ch=getchar();
- for( i=1;i<=MAXSTRLEN&&(ch!='\n');i++) // 录入主串
- {
- S[i]=ch;
- ch=getchar();
- }
- S[0]=i-1; // S[0]用于存储主串中字符个数
- ch=getchar();
- for( i=1;i<=MAXSTRLEN&&(ch!='\n');i++) // 录入模式串
- {
- T[i]=ch;
- ch=getchar();
- }
- T[0]=i-1; // T[0]用于存储模式串中字符个数
- get_next(T,next);
- pos=Index_KMP(S,T,1,next); // 请填空
-
- printf("%d\n",pos);
- }
- }
- #include<stdio.h>
- #include<malloc.h>
- #include<stdlib.h>
- #include<iostream>
- using namespace std;
-
- int b[100005];
-
- int main()
- {
- int n;
- scanf("%d",&n);
- for(int i=0;i<n;i++)
- {
- int m;
- scanf("%d",&m);
- int* a=new int[m];
- for(int j=0;j<m;j++)
- {
- cin>>a[j];
- }
- int *p,*q;
- p=a;
- q=p+m-1;
- while(p<q)
- {
- while(*p<0&&p<q) p++;
- while(*q>0&&p<q) q--;
- int temp=*p;
- *p=*q;
- *q=temp;
-
- }
- for(int t=0;t<m;t++)
- {
- printf("%d ",a[t]);
- }
- printf("\n");
-
- }
- return 0;
- }
- #include "stdio.h"
- #include "malloc.h"
- #include <iostream>
- #define TRUE 1
- #define FALSE 0
- #define OK 1
- #define ERROR 0
- #define INFEASIBLE -1
- #define OVERFLOW -2
- typedef int Status;
- using namespace std;
-
- typedef char ElemType;
- typedef struct BiTNode{
- ElemType data;
- struct BiTNode *lchild,*rchild;//左右孩子指针
- } BiTNode,*BiTree;
-
- Status CreateBiTree(BiTree &T) { // 算法6.4
- // 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
- // 构造二叉链表表示的二叉树T。
- char ch;
- scanf("%c",&ch);
- if (ch=='#') T = NULL;
- else {
- if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
- T->data=ch; // 生成根结点
- CreateBiTree(T->lchild); // 构造左子树
- CreateBiTree((T->rchild)); // 构造右子树
- }
- return OK;
- } // CreateBiTree
-
-
-
-
-
- Status PreOrderTraverse( BiTree T) {
- // 前序遍历二叉树T的递归算法
- //补全代码,可用多个语句
- if(T)
- {
- cout<<T->data;
- PreOrderTraverse(T->lchild);
- PreOrderTraverse(T->rchild);
- }
-
- } // PreOrderTraverse
-
-
- Status InOrderTraverse( BiTree T) {
- // 中序遍历二叉树T的递归算法
- //补全代码,可用多个语句
- if(T)
- {
- InOrderTraverse(T->lchild);
- cout<<T->data;
- InOrderTraverse(T->rchild);
- }
-
-
- } // InOrderTraverse
-
- Status PostOrderTraverse( BiTree T) {
- // 后序遍历二叉树T的递归算法
- //补全代码,可用多个语句
- if(T)
- {
- PostOrderTraverse(T->lchild);
- PostOrderTraverse(T->rchild);
- cout<<T->data;
- }
-
- } // PostOrderTraverse
-
-
-
- int main() //主函数
- {
- BiTree T;
- CreateBiTree(T);
- PreOrderTraverse(T);
- cout<<endl;
- InOrderTraverse(T);
- cout<<endl;
- PostOrderTraverse(T);
- cout<<endl;
- return 0;
- //补充代码
- }//main
-
-
- #include "stdio.h"
- #include "malloc.h"
- #define TRUE 1
- #define FALSE 0
- #define OK 1
- #define ERROR 0
- #define INFEASIBLE -1
- #define OVERFLOW -2
- #include <iostream>
- using namespace std;
- typedef int Status;
-
- typedef char ElemType;
- typedef struct BiTNode{
- ElemType data;
- struct BiTNode *lchild,*rchild;//左右孩子指针
- } BiTNode,*BiTree;
-
- Status CreateBiTree(BiTree &T,int &count0,int &count1,int &count2) { // 算法6.4
- // 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
- // 构造二叉链表表示的二叉树T。
-
- char ch;
- scanf("%c",&ch);
- if (ch=='#') T = NULL;
- else {
- if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
- T->data=ch; // 生成根结点
- CreateBiTree(T->lchild,count0,count1,count2); // 构造左子树
- CreateBiTree(T->rchild,count0,count1,count2); // 构造右子树
- if(!T->lchild&&!T->rchild) count0++;
- else if((T->lchild&&!T->rchild)||(!T->lchild&&T->rchild)) count1++;
- else if(T->lchild&&T->rchild) count2++;
-
- }
- return OK;
- } // CreateBiTree
-
- int main() //主函数
- {
- BiTree T;
- int count0=0,count1=0,count2=0;
- CreateBiTree(T,count0,count1,count2);
- cout<<count2<<endl;
- cout<<count1<<endl;
- cout<<count0<<endl;//补充代码
- return 0;
- }//main
-
-
- #include<stdio.h>
- #include<math.h>
- #include<iostream>
- using namespace std;
- int level[55];
- struct tree
- {
- int p;
- int l;
- int r;
- }tree[100];
-
- void t(int p,int c)
- {
- tree[c].p=p;
- if(!tree[p].l)
- tree[p].l=c;
- else
- tree[p].r=c;
- }
- void h(int root,int c)
- {
- level[c]++;
- if(tree[root].l)
- h(tree[root].l,c+1);
- if(tree[root].r)
- h(tree[root].r,c+1);
- }
- int main()
- {
- int n;
- int x,y;
- int ans=0,root=0;
- cin>>n;
- for(int i=1;i<n;i++)
- {
-
- cin>>x>>y;
- t(x,y);
- }
- for(int i=1;i<=n;i++)
- {
- if(tree[i].p==0)
- {
- root=i;
- break;
- }
- }
- h(root,1);
- for(int i=1;i<=50;i++)
- {
- if(level[i]>ans)
- ans=level[i];
- }
- cout<<ans;
- return 0;
- #include<iostream>
- #include<cstring>
- using namespace std;
- #define maxn 10000
- char pre[maxn],in[maxn],post[maxn];
- void Post(char pre[],char in[],int len,int root)
- {
- if(len<=0) return;
- int i=0;
- while(in[i]!=pre[0]) i++;
- Post(pre+1,in,i,root-(len-i-1)-1);
- Post(pre+1+i,in+i+1,len-i-1,root-1);
- post[root]=pre[0];
- }
- int main()
- {
- cin>>pre>>in;
- int len=strlen(in);
- Post(pre,in,len,len-1);
- cout<<post<<endl;
- return 0;
- }
- #include<stdio.h>
- #include<malloc.h>
- #include<iostream>
-
- using namespace std;
- typedef int ElemType;
-
- struct BiTNode
- {
- ElemType data;
- BiTNode *lchild,rchild;
- }BiTNode,*BiTree;
-
- void insertData(BiTree &T,ElemType data)
- {
- BiTree p=new BiTNode;
- P->data=data;
- p->lchild=NUll;
- p->rchild=NUll;
- if(T==NULL)
- T=p;
- else
- {
- if(T->lchild==NULL)
- T->lchild=p;
- else T->rchild=p;
- }
- }
-
- void PreOrderSearch(BiTree T,ElemType x,BiTree &result)
- {
- if(T)
- {
- if(T->data==x) result=T;
- PreOrderSearch(T->lchild,x,result);
- PreOrderSearch(T->rchild,x,result);
- }
- }
-
- int maxcount=0;
- int maxDepth(BiTree &T)
- {
- if(T==NULL)
- return 0;
- int leftdepth=maxDepth(T->lchild);
- int rightdepth=maxDepth(T->rchild);
- int count=leftdepth+rightdepth;
- maxcount=count>maxcount?count:maxcount;
- return leftdepth>rightdepth?leftdepth+1:rightdepth+1;
- }
-
- int main()
- {
- BiTree P=NULL;
- int n;
- cin>>n;
- n--;
- insertData(P,1);
- while(n--)
- {
- ElemType x,y;
- cin>>x>>y;
- BiTree res=NULL;
- PreOrderSearch(P,x,res);
- insertData(res,y);
- }
- maxDepth(P);
- cout>>maxcount;
- return 0;
- }
- #include"malloc.h" /* malloc()等
- #include"stdio.h"
- #include"stdlib.h"
- typedef int ElemType;
- typedef struct /*静态查找表的顺序存储结构 */
- {
- ElemType *elem; /* 数据元素存储空间基址,建表时按实际长度分配,0号单元留空 */
- int length; /* 表长度 */
- }SSTable;
-
- void Creat_Seq(SSTable &ST,int n)
- { /* 操作结果: 构造一个含n个数据元素的静态顺序查找表ST(数据来自数组r) */
- int i,temp;
- ST.elem=(ElemType *)malloc((n+1) * sizeof(ElemType)); /* 动态生成n个数据元素空间(0号单元不用) */
- if(!(ST).elem)
- {
- printf("ERROR\n");
- exit(0);
- } /*内存分配失败结束程序*/
- for(i=1;i<=n;i++)
- {
- scanf("%d",&temp);
- *(ST.elem+i)=temp; /* 依次赋值给ST */
- }
- ST.length=n;
- }
-
- int Search_Seq(SSTable &ST,ElemType key)
- { /* 在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为 */
- /* 该元素在表中的位置,否则为0。算法9.1 */
- int i=ST.length;
- ST.elem[0]=key;
- while(ST.elem[i]!=key)
- {
- i--;
- }
- return i;
- }
-
- int main()
- {
- SSTable ST;
- int loc,key;
- int n;
- scanf("%d",&n);
- Creat_Seq(ST,n);
- //printf("Please input the key value:");
- scanf("%d",&key);
- loc = Search_Seq(ST,key);
- if(loc!=0)
- printf("The element position is %d.\n",loc);
- else
- printf("The element is not exist.\n");
- }
- #include<iostream>
- using namespace std;
-
- int n,key,mid;
- int binary(int a[],int n)
- {
- int low=0,high=n;
- while(low<=high)
- {
- mid=(low+high)/2;
- if(a[mid]==key)
- return 1;
- else if(key<a[mid])
- high=mid-1;
- else low=mid+1;
- }
- return 0;
- }
- int main()
- {
- cin>>n;
- int a[n+5];
- for(int i=0;i<n;i++)
- cin>>a[i];
- cin>>key;
- if(binary(a,n)) cout<<"The element position is "<<mid<<'.';
- else cout<<"The element is not exist.";
- }
- #include"malloc.h" /* malloc()等 */
- #include"stdlib.h" /* exit() */
- #include"stdio.h"
- #define EQ(a,b) ((a)==(b))
- #define SUCCESS 1
- #define UNSUCCESS 0
- #define NULLKEY -1 /*哈希表无元素时值为-1*/
- typedef int ElemType;
- int length;
- typedef struct
- {
- ElemType *elem; /* 数据元素存储基址,动态分配数组 */
- int count; /* 当前数据元素个数 */
- }HashTable;
-
- void InitHashTable(HashTable *H)
- { /* 操作结果: 构造一个长度为length的哈希表,length为全局变量 */
- int i;
- (*H).count=0; /* 当前元素个数为0 */
- (*H).elem=(ElemType*)malloc(length*sizeof(ElemType));
- if(!(*H).elem)
- exit(0); /* 存储分配失败 */
- for(i=0;i<length;i++)
- (*H).elem[i]=NULLKEY; /* 未填记录的标志 */
- }
- unsigned Hash(ElemType K)
- { /* 一个简单的哈希函数*/
-
-
- return 3*k%length;
-
-
-
-
-
- }
- void collision(int *p) /*线性探测再散列 */
- { /* 开放定址法处理冲突 */
-
-
- *p=(*p+1)%length;
-
-
-
-
- }
- int SearchHash(HashTable H,ElemType K,int *p,int *c)
- { /* 在开放定址哈希表H中查找关键码为K的元素,若查找成功,以p指示待查数据 */
- /* 元素在表中位置,并返回SUCCESS;否则,以p指示插入位置,并返回UNSUCCESS */
- /* c用以计冲突次数,其初值置零,供建表插入时参考。算法9.17 */
- *p=Hash(K); /* 求得哈希地址 */
- while(H.elem[*p]!=NULLKEY&&!EQ(K,H.elem[*p]))
- { /* 该位置中填有记录,并且关键字不相等 */
- (*c)++;
- if(*c<length)
- collision(p); /* 求得下一探查地址p */
- else
- break;
- }
- if EQ(K,H.elem[*p])
- return SUCCESS; /* 查找成功,p返回待查数据元素位置 */
- else
- return UNSUCCESS; /* 查找不成功(H.elem[p].key==NULLKEY),p返回的是插入位置 */
- }
- int InsertHash(HashTable *H,ElemType e)
- { /* 查找不成功时插入数据元素e到开放定址哈希表H中,并返回查找长度 */
- int c,p;
- c=0;
- if(SearchHash(*H,e,&p,&c)) /* 表中已有与e有相同关键字的元素 */
- printf("哈希表中已有元素%d。\n",e);
- else{ /* 插入e */
- (*H).elem[p]=e;
- ++(*H).count;
- }
- return c+1; /*查找长度为冲突次数加1*/
- }
- void TraverseHash(HashTable H)
- { /* 按哈希地址的顺序打印哈希表,无元素位置用X表示 */
- int i;
- printf("HashTable Address:0~%d\n",length-1);
- for(i=0;i<length;i++)
- if(H.elem[i]==NULLKEY) /* 有数据 */
- printf("X ");
- else
- printf("%d ",H.elem[i]);
- printf("\n");
- }
- main()
- {
- float i=0,j=0;
- ElemType e;
- HashTable H;
- //printf("Input Table length:");
- scanf("%d",&length);
- InitHashTable(&H);
- //printf("Input key words sequence, -1 conclusion input:");
- scanf("%d",&e);
- while(e!=-1)
- {
- j ++; /*j记录输入元素个数*/
- i = i + InsertHash(&H,e); /*i记录查找长度的和*/
- scanf("%d",&e);
- }
- TraverseHash(H);
- printf("Average search length=%f\n",i/j);
- }
- #include<iostream>
- using namespace std;
-
- void InsertSort(int *a,int n)
- {
- for(int i=2;i<=n;i++)
- {
- if(a[i]<a[i-1])
- {
- a[0]=a[i];
- a[i]=a[i-1];
- int j;
- for(j=i-1;a[0]<a[j-1];j--)
- {
- a[j]=a[j-1];
- }
- a[j]=a[0];
- for(int k=1;k<=n;k++)
- {
- cout<<a[k]<<' ';
- }
- cout<<endl;
- }
-
- }
-
- }
-
- int main()
- {
- int a[1000];
- int n;
- cin>>n;
- for(int i=1;i<=n;i++)
- {
- cin>>a[i];
- }
- InsertSort(a,n);
- }
- #include<iostream>
- using namespace std;
-
- void BinSort(int *a,int n)
- {
- for(int i=2;i<=n;i++)
- {
- int low=1,high=i-1,mid;
- a[0]=a[i];
- while(low<=high)
- {
- mid=(low+high)/2;
- if(a[0]<a[mid]) high=mid-1;
- else low=mid+1;
- }
- for(int j=i;j>high+1;j--) a[j]=a[j-1];
- a[high+1]=a[0];
- for(int k=1;k<=n;k++) cout<<a[k]<<' ';
- cout<<endl;
- }
-
- }
- int main()
- {
- int n,a[10000];
- cin>>n;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- BinSort(a,n);
- return 0;
-
- }
- #include<iostream>
- using namespace std;
-
- void ShellSort(int a[],int n)
- {
- int temp;
- int d=n/2;
- while(d)
- {
- for(int i=d;i<n;i++)
- {
- temp=a[i];
- int j=i;
- while(j>=d&&temp<a[j-d])
- {
- a[j]=a[j-d];
- j-=d;
- }
- a[j]=temp;
- }
- d=d/2;
- for(int k=0;k<n;k++)
- cout<<a[k]<<' ';
- cout<<endl;
- }
-
- }
- int main()
- {
- int n,a[100000];
- cin>>n;
- for(int i=0;i<n;i++)
- cin>>a[i];
- ShellSort(a,n);
-
- }
- #include<iostream>
- using namespace std;
-
- void BubbleSort(int *a,int n)
- {
- int end=n-1;
- bool flag=1;
- while(end>0&&flag)
- {
- flag=false;
- for(int i=1;i<=end;i++)
- {
- if(a[i]>a[i+1])
- {
- int temp=a[i];
- a[i]=a[i+1];
- a[i+1]=temp;
- flag=true;
- }
- }
- end--;
- for(int k=1;k<=n;k++)
- cout<<a[k]<<' ';
- cout<<endl;
- }
-
- }
- int main()
- {
- int n,a[10000];
- cin>>n;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- BubbleSort(a,n);
- return 0;
- }
- #include<iostream>
- using namespace std;
-
- int Part(int *a,int l,int r)
- {
- a[0]=a[l];
- int q=a[l];
- while(l<r)
- {
- while(a[r]>=q&&l<r) r--;
- a[l]=a[r];
- while(a[l]<=q&&l<r) l++;
- a[r]=a[l];
- }
- a[l]=a[0];
- return l;
- }
- void QSort(int *a,int l,int r,int len)
- {
- if(l<r)
- {
- int p=Part(a,l,r);
- for(int k=1;k<=len;k++)
- cout<<a[k]<<' ';
- cout<<endl;
- QSort(a,l,p-1,len);
- QSort(a,p+1,r,len);
-
- }
-
- }
-
- int main()
- {
- int n,a[10000];
- cin>>n;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- QSort(a,1,n,n);
- return 0;
- }
- #include<iostream>
- using namespace std;
-
- void Ssort(int *a,int len)
- {
- for(int i=1;i<len;++i)
- {
- int k=i;
- for(int j=i+1;j<=len;++j)
- if(a[j]<a[k])
- k=j;
-
- int tmp=a[k];
- a[k]=a[i];
- a[i]=tmp;
-
- for(int k=1;k<=len;++k)
- cout<<a[k]<<' ';
- cout<<endl;
- }
- }
-
- int main()
- {
- int n,a[100000];
- cin>>n;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- Ssort(a,n);
- return 0;
-
- }
- #include<iostream>
-
- using namespace std;
- void Adjust(int *a,int s,int len)
- {
- int rc=a[s];
-
- for(int i=2*s;i<=len;i=i*2)
- {
- if(a[i]<a[i+1]&&i<len)
- i++;
- if(rc<a[i])
- {
- a[s]=a[i];
- s=i;
- }
- }
- a[s]=rc;
- }
-
- void CreatHeap(int *a,int len)
- {
- for(int i=len/2;i>0;i--)
- {
- Adjust(a,i,len);
- }
- }
-
- void StackSort(int *a,int len)
- {
- CreatHeap(a,len);
- for(int i=len;i>1;i--)
- {
- for(int k=1;k<=len;k++)
- cout<<a[k]<<' ';
- cout<<endl;
-
- int temp=a[1];
- a[1]=a[i];
- a[i]=temp;
- Adjust(a,1,i-1);
-
- }
-
- }
- int main()
- {
- int n,a[100000];
- cin>>n;
- for(int i=1;i<=n;i++)
- {
- cin>>a[i];
- }
- StackSort(a,n);
- for(int k=1;k<=n;k++)
- cout<<a[k]<<' ';
- return 0;
- }
- #include<iostream>
- using namespace std;
- int n;
-
- void Merge(int a[],int l,int m,int r)
- {
- int *p=new int [r-l+10];
- int i=l,j=m+1,k=0;
- while(i<=m&&j<=r)
- {
- if(a[i]>=a[j]) p[k++]=a[j++];
- else p[k++]=a[i++];
- }
- while(i<=m) p[k++]=a[i++];
- while(j<=r) p[k++]=a[j++];
- for(i=l,k=0;i<=r;i++,k++)
- {
- a[i]=p[k];
- }
- delete[]p;
- }
- void group_two(int a[],int gap)
- {
- int i=1;
- while(i+2*gap<n)
- {
- Merge(a,i,i+gap-1,i+2*gap-1);
- i=i+2*gap;
- }
- if(i+gap-1<n) Merge(a,i,i+gap-1,n);
-
- }
- void Msort(int a[])
- {
- for(int gap=1;gap<n;gap*=2)
- {
- group_two(a,gap);
- for(int k=1;k<=n;k++)
- cout<<a[k]<<' ';
- cout<<endl;
- }
- }
-
-
- int main()
- {
- int a[10000];
- cin>>n;
- for(int i=1;i<=n;i++)
- {
- cin>>a[i];
- }
- Msort(a);
- return 0;
- }*/
- #include <iostream>
-
- using namespace std;
-
- #define num 100
- int arr[num][num];
- int main()
- {
- int a,b;
- cin>>a>>b;
- for(int i=0;i<b;i++)
- {
- int v1,v2;
- cin>>v1>>v2;
- arr[v1][v2]=1;
- }
- for(int i=1;i<=a;i++)
- {
- for(int j=1;j<=a;j++)
- {
- cout<<arr[i][j]<<' ';
-
- }
- cout<<endl;
- }
- return 0;
- }*/
- #include<iostream>
- #include<queue>
- #include<vector>
- using namespace std;
-
- int book[10000]={0};
- vector<int>e[10000];
-
- void dfs(int z)
- {
- cout<<(char)(z+'a')<<" ";
- int len=e[z].size();
- for(int i=0;i<len;i++)
- {
- int y=e[z][i];
- if(book[y]==0)
- {
- book[y]=1;
- dfs(y);
- }
- }
- return ;
- }
- void bfs(int z)
- {
- queue<int>q;
- q.push(z);
- while(!q.empty())
- {
- int r=q.front();
- q.pop();
- cout<<(char)(r+'a')<<" ";
- int len=e[r].size();
- for(int i=0;i<len;i++)
- {
- int y=e[r][i];
- if(book[y]==0)
- {
- book[y]=1;
- q.push(y);
- }
- }
- }
- return;
-
- }
- int main()
- {
- int t;
- cin>>t;
- int n,m;
- cin>>n>>m;
- int temp;
- for(int i=0;i<n;i++)
- {
- char x;
- cin>>x;
- }
- for(int i=0;i<m;i++)
- {
- char x,y;
- cin>>x>>y;
- int a=(char)(x-'a');
- int b=(char)(y-'a');
-
- if(i==0)
- temp=a;
- if(t<=1)
- e[a].insert(e[a].begin(),b);
- else
- {
- e[a].insert(e[a].begin(),b);
- e[b].insert(e[b].begin(),a);
- }
- }
- book[temp]=1;
- //选择遍历
- //dfs(temp);
- bfs(temp);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。