顺序表
// test789.cpp : Defines the entry point for the console application.
//
#include "stdio.h"
#include "stdlib.h"
#define SIZE 100
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
//创建一个线性表
int InitList(SqList &L)
{
L.elem=(int *)malloc(SIZE*sizeof(int));
if(!L.elem)
return 0;
L.length=0;
L.listsize=SIZE;
return 1;
}
//给已创好的线性表导入n个数据
void CreateList(SqList &L,int n)
{
int i,x;
for(i=0;i<n;i++)
{
L.length++;
printf("请输入第%d个元素:",i+1);
scanf("%d",&x);
L.elem[i]=x;
}
}
//销毁线性表
int DestroyList(SqList &L)
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return 1;
}
//将线性表重新设置为空表
int ClearList(SqList &L)
{
L.length=0;
return 1;
}
//判断线性表是否为空表
int ListEmpty(SqList L)
{
if(L.length==0)
return 1;
else
return 0;
}
//返回线性表的长度
int ListLength(SqList L)
{
return L.length;
}
//取线性表中第i个元素的值
int GetElem(SqList L,int i,int &e)
{
if(i<1 || i>L.length)
return 0;
e=L.elem[i-1];
return 1;
}
//在线性表中查找元素e在几号位置上
int LocateList(SqList L,int e)
{
int i;
for(i=0;i<L.length;i++)
if(e==L.elem[i])
return i+1;
return 0;
}
//获得元素cur_e前一个元素,把值赋给pre_e
int PirorElem(SqList L,int cur_e,int &pre_e)
{
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==cur_e)
break;
if(i==0 || i==L.length)
return 0;
pre_e=L.elem[i-1];
return 1;
}
//获得元素cur_e后一个元素,把值赋给next_e
int NextElem(SqList L,int cur_e,int &next_e)
{
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==cur_e)
break;
if(i==L.length-1 || i==L.length)
return 0;
next_e=L.elem[i+1];
return 1;
}
//在第i个元素前插入元素e
int ListInsert(SqList &L,int i,int e)
{
int p;
if(i<1 || i>L.length+1)
return 0;
for(p=L.length-1;p>=i-1;p--)
L.elem[p+1]=L.elem[p];
L.elem[i-1]=e;
++L.length;
return 1;
}
//删除第i个元素,并返回值给e
int ListDelete(SqList &L,int i,int &e)
{
int p;
if(i<1 || i>L.length)
return 0;
e=L.elem[i-1];
for(p=i;p<=L.length-1;p++)
L.elem[p-1]=L.elem[p];
--L.length;
return 1;
}
//顺序表的遍历输出
void TraverseList(SqList L)//
{
int i;
printf("此时顺序表的遍历输出:");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
int main(int argc, char* argv[])
{
int i,e,n,cur_e,pre_e,next_e;// i:第几号元素 e:某个数据的元素值
SqList L; // cur_e:当前的元素值
InitList(L); //pre_e:该元素前面的值 next_e:该元素后面的值
printf("请输入需要导入顺序表元素的个数n:");
scanf("%d",&n);
CreateList(L,n);//创建一个线性表
TraverseList(L);//遍历输出一次该线性表的数据
printf("\n请输入需要查找元素的位置i:");//由位置i 查找元素的值e
scanf("%d",&i);
if(GetElem(L,i,e))
printf("其值为:%d",e);
else
printf("输入有误!!!");
printf("\n请输入需要查找的元素值e:");//由元素的值e 查找所在的位置i
scanf("%d",&e);
if(LocateList(L,e))
printf("其位置为:%d\n",LocateList(L,e));
else
printf("输入有误!!!");
printf("\n请输入需要删除的元素的位置i:");//根据元素的位置i,删去此条数据
scanf("%d",&i);
if(ListDelete(L,i,e))
printf("删出的元素值为:%d\n",e);
else
printf("输入有误!!!");
TraverseList(L);
printf("\n请输入需要插入的元素位置和元素值(在位置前插入)i和e:");
scanf("%d %d",&i,&e);
if(ListInsert(L,i,e)==0)
printf("输入有误!!!");
TraverseList(L);
printf("此时顺序表长度为:%d",ListLength(L));
printf("\n查找当前元素的前一个元素的值,请输入当前元素的值cur_e:");
scanf("%d",&cur_e);
if(PirorElem(L,cur_e,pre_e))
printf("前一个元素值为:%d\n",pre_e);
else
printf("输入有误!!!");
printf("\n查找当前元素的后一个元素的值,请输入当前元素的值cur_e:");
scanf("%d",&cur_e);
if(NextElem(L,cur_e,next_e))
printf("后一个元素值为:%d\n",next_e);
else
printf("输入有误!!!");
if(ClearList(L))
printf("\n顺序表清空成功!\n");
if(DestroyList(L))
printf("顺序表销毁成功!\n");
printf("Hello World!\n");
return 0;
}
运行结果截图:
单链表
// code2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
//头插法创建一个链表
void CreateList_toucha(LinkList &L,int n)
{
int i;
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("Please input data:");
scanf("%d",&(p->data));
p->next=L->next;
L->next=p;
}
}
//构造一个空表
int InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
return 0;
L->next=NULL;
return 1;
}
//将表L置为空
int ClearList(LinkList &L)
{
LinkList p,q;
p=L->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
return 1;
}
//销毁表L
int DestroyList(LinkList &L)
{
LinkList p=L;
while(L)
{
p=L->next;
free(L);
L=p;
}
L=NULL;
return 1;
}
//判断表L是否为空
int ListEmpty(LinkList L)
{
if(L->next)
return 0;
else
return 1;
}
//求表L的长度
int ListLength(LinkList L)
{
int count=0;
LinkList p;
p=L->next;
while(p)
{
count++;
p=p->next;
}
return count;
}
//得到第i个元素的值e
int GetElem(LinkList L,int i,int &e)
{
int j=1;
LinkList p=L->next;
while(p && j<i)
{
p=p->next;
j++;
}
if(!p || j>i)
return 0;
e=p->data;
return 1;
}
//根据e定位其在表L中的几号位置上
int LocateList(LinkList L,int e)
{
int i=1;
LinkList p=L->next;
while(p)
{
if(e==p->data)
return i;
p=p->next;
i++;
}
return 0;
}
//在第i个数据前插入元素
int InsertList(LinkList &L,int i,int e)
{
int j=0;
LinkList p=L,s;
while(p && j<i-1)
{
p=p->next;
j++;
}
if(!p && j>j-1)
return 0;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
//删除表L中的第i号数据
int DeleteList(LinkList &L,int i,int &e)
{
int j=0;
LinkList p=L,q;
while(p->next && j<i-1)
{
p=p->next;
j++;
}
if(!p->next || j<i-1)
return 0;
q=p->next;
e=q->data;
p->next=q->next;
free(q);
return 1;
}
//遍历表L
void Traverse(LinkList L)
{
LinkList p=L->next;
printf("表L的遍历输出为:");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkList L;
InitList(L);
CreateList_toucha(L,4);
Traverse(L);
int e;
printf("删除第3个数据:");
DeleteList(L,3,e);
printf("\n删除的值为:%d",e);
Traverse(L);
printf("在第2号位置插入数据43:");
InsertList(L,2,43);
Traverse(L);
printf("Hello World!\n");
return 0;
}
运行结果截图:
二叉树
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
typedef struct BiTNode
{
char data;
struct BiTNode *Left,*Right;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
char ch;
scanf("%c",&ch);
if(ch==' ')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
if(!(*T))
exit(-1);
(*T)->data=ch;
CreateBiTree( &(*T)->Left );
CreateBiTree( &(*T)->Right );
}
}
void DestroyBiTree(BiTree *T)
{
if(*T)
{
if(&(*T)->Left)
DestroyBiTree( &((*T)->Left) );
if(&(*T)->Right)
DestroyBiTree( &((*T)->Left) );
}
}
void Pre1(BiTree T)
{
if(T)
{
printf("%c ",T->data);
Pre1(T->Left);
Pre1(T->Right);
}
}
void Pre2(BiTree T)
{
if(T)
{
Pre2(T->Left);
printf("%c ",T->data);
Pre2(T->Right);
}
}
void Pre3(BiTree T)
{
if(T)
{
Pre3(T->Left);
Pre3(T->Right);
printf("%c ",T->data);
}
}
//1二叉树中非叶子结点个数
int count;
void pre1(BiTree T)
{
if(T)
{
if(!(T->Left==NULL && T->Right==NULL)) // 等价于if(T->Left || T->Right)
count++;
pre1(T->Left);
pre1(T->Right);
}
}
void fun1(BiTree T)
{
count=0;
pre1(T);
printf("\n1.非叶子结点总数为: %d",count);
}
//2打印输出二叉树第四层结点
void pre2(BiTree T,int i)
{
if(T)
{
if(i==4)
printf("%c ",T->data);
pre2(T->Left,i+1);
pre2(T->Right,i+1);
}
}
void fun2(BiTree T)
{
printf("\n2.输出第四层结点:");
pre2(T,1);
}
//3二叉树中度为2的结点个数
void pre3(BiTree T)
{
if(T)
{
if(T->Left && T->Right)
count++;
pre3(T->Left);
pre3(T->Right);
}
}
void fun3(BiTree T)
{
count=0;
pre3(T);
printf("\n3.度为2的结点个数: %d",count);
}
//4二叉树结点总数
void pre4(BiTree T)
{
if(T)
{
count++;
pre4(T->Left);
pre4(T->Right);
}
}
void fun4(BiTree T)
{
count=0;
pre4(T);
printf("\n4.结点总数为: %d",count);
}
//5二叉树叶子结点总数
void pre5(BiTree T)
{
if(T)
{
if(T->Left==NULL && T->Right==NULL)
count++;
pre5(T->Left);
pre5(T->Right);
}
}
void fun5(BiTree T)
{
count=0;
pre5(T);
printf("\n5.叶子结点总数: %d",count);
}
//6遍历二叉树并显示每个结点的层号
void pre6(BiTree T,int i)
{
if(T)
{
printf("%c-%d ",T->data,i);
pre6(T->Left,i+1);
pre6(T->Right,i+1);
}
}
void fun6(BiTree T)
{
printf("\n6.历二叉树并显示每个结点的层号如下:\n");
pre6(T,1);
}
//7二叉树的深度
int pre0(BiTree T)
{
int high,lhigh,rhigh;
if(T==NULL)
high=0;
else
{
lhigh=pre0(T->Left);
rhigh=pre0(T->Right);
high=(lhigh>=rhigh?lhigh:rhigh)+1;
}
return high;
}
int main()
{
BiTree T;
printf("请输入建立二叉树的字符序列包括:\n");
CreateBiTree(&T);
printf("前序遍历为:\n");
Pre1(T);
printf("\n中序遍历为:\n");
Pre2(T);
printf("\n后序遍历为:\n");
Pre3(T);
fun1(T);
fun2(T);
fun3(T);
fun4(T);
fun5(T);
fun6(T);
printf("\n这棵树的深度为: %d\n",pre0(T));
return 0;
}
运行结果截图:
简单排序
// code666.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "string.h"
#define MAXSIZE 100
#define N 6
typedef struct
{
int num;
char name[10];
int score;
}infor;//存储某个人的信息——编号、姓名、分数
typedef struct
{
infor r[MAXSIZE+1];
int length;
}Sqlist;
void swap(infor &x,infor &y)
{
infor z;
z=x;
x=y;
y=z;
}
void BubbleSort(Sqlist &L,int n)
{
int i,j,last;
i=n;
while(i>1)
{
last=1;
for(j=0;j<i;j++)
if(L.r[j].score>L.r[j+1].score)
{
swap(L.r[j],L.r[j+1]);
last=j;
}
i=last;
}
}
void InsertSort(Sqlist &L)
{
int i,j;
for(i=2;i<=L.length;i++)
if(L.r[i].score<L.r[i-1].score)
{
L.r[0]=L.r[i];
for(j=i-1;L.r[0].score<L.r[j].score;j--)
L.r[j+1]=L.r[j];
L.r[j+1]=L.r[0];
}
}
void SelectSort(Sqlist &L)
{
int i,j,min;
for(i=1;i<=L.length-1;i++)
{
min=i;
for(j=i+1;j<=L.length;j++)
if(L.r[j].score<L.r[min].score)
min=j;
if(min!=i)
swap(L.r[min],L.r[i]);
}
}
void print(Sqlist L)
{
int i;
for(i=1;i<=L.length;i++)
printf("编号:%d-%s->%d \n",L.r[i].num,L.r[i].name,L.r[i].score);
printf("\n");
}
void main()
{
int d[N]={98,67,88,100,63,70};
char *name[N]={"张三","王五","李明","赵四","李华","强三"};
Sqlist L;
L.length=N;
int i,j;
for(i=0;i<N;i++)
{
L.r[i+1].num=i+1;
L.r[i+1].score=d[i];
strcpy(L.r[i+1].name,name[i]);
// for(j=0;name[j]!='\0';j++)
// L.r[i+1].name[j]=*(name[i]++);
}
printf("排序前:\n");
print(L);
BubbleSort(L,N);
printf("排序后:\n");
print(L);
/*
printf("排序前:");
print(L);
InsertSort(L);
printf("排序后:");
print(L);
printf("排序前:");
print(L);
SelectSort(L);
printf("排序后:");
print(L);
*/
}
运行结果截图:
轻松一下
高清无水印【琉璃 | 剧同名主题曲MV | 演唱:刘宇宁】