对称对称语言

/*这个问题的关键是如何交换ASCII的二进制位。下面是一个简短的算法和在VC 6.0环境下运行结果的截图。

*/

#包含stdio.h

char swapbit(char c) {

Char i,num = 0,标题为对称排序的chC程序 #包括iostream

#包含字符串

使用命名空间std

字符串s[15];

int main()

{

int n;

CIN n;

for(int I = 0;在;我)

CIN s[I];

int left=0,right = n-1;

while(左向右)

{

for(int I = left 1;I =对;我)

if (s[left]。长度()s[i]。length()) swap(s[left],s[I]);

for(int I = left 1;iright我)

如果(s[右]。长度()s[i]。length()) swap(s[right],s[I]);

左,-右;

}

for(int I = 0;在;我)

cout s[i] ((i==n-1)?\ n ':' ');

}

顺序表和链表的基本操作都是用C语言实现的! 顺序存储的线性表算法

#包含“stdio.h”

#包含" stdlib.h "

#定义状态int

#定义溢出0

#定义正确1

#定义假0

#定义确定1

#定义MAXSIZE 100

typedef int ElemType

typedef结构列表

{ elem type elem[MAXSIZE];

int长度;

} SqList

void InitList(SQL list L){

l .长度= 0;

}

/*创建序列表*/

void create list(SQL list L)

{

int I;

printf("输入长度");

scanf("%d ",l . length);//输入表格长度

for(I = 1;i=L .长度;我)

scanf("%d ",l . elem[I-1]);//输入元素

}

//顺序表的遍历

void printdata(ElemType e){

printf("M ",e);

}

void Traverse(SQL list L,void(* visit)(element type e))

{ int I;

printf("列表的元素是:\ n ");

for(I = 1;i=L .长度;i ){

if(i==0)printf("\n”);//每行显示10个元素。

访问(l . elem[I-1]);//输出表格中的元素

}

printf(" \ n ");

}

//将元素E插入到有序序列表L中,使序列仍然有序。

void Insert(SQL list L,ElemType e)

{int i,j;

if (L.length==MAXSIZE)exit(溢出);//表格已满,无法插入。

for(I = 1;I = l . length l . elem[I-1]= e;I);//向后看

for(j = l . length;j = I;j -)

l . elem[j]= l . elem[j-1];//元素向后移动

l . elem[I-1]= e;//插入e

长度=长度1;//表长度加1

}

//建立一个增量有序的序列表。

void create list _ Sorted(SQL list L)

{int i,num

elem type e;

l .长度= 0;

printf("创建一个排序列表,输入列表的长度\ n ");

scanf("%d ",数字);

printf("输入数据%d个数字\n ",num);

for(I = 1;i = numi ){

scanf("%d ",e);

插入(L,e);

}

}

/*合并两个排序列表*/

void MergeList(SqList La,SqList Lb,SqList Lc)

{int *pa,*pb,* pc

if(la . length lb . length maxsize)exit(溢出);

其他

{ pa = La.elempb = Lb.elempc = Lc.elem

while(pala . elem la . length pblb . elem lb . length)

*pc =(*pa=*pb)?* pa:* Pb;/*公共部分的合并*/

while(pala . elem la . length)* PC = * pa;

/*R1表的其余部分放在R的后面*/

while(pblb . elem lb . length)* PC = * Pb;

/*R2表的其余部分放在R的后面*/

Lc.length=La.length磅.长度;/*R表格长度*/

}

}

//确定元素是否对称,对称返回TRUE或FALSE。

状态对称(SqList L)

{int低,高;

低= 0;

高= l . length-1;

while(低高)

if(l . elem[low]= = l . elem[high]){ low;高-;}

else返回(FALSE);返回(真);}

//序列表的主函数部分

//#包含" seqlist.h "

void main()

L2 L1的SqList

int select

elem type e;

do { printf(" \ n1 insert 2 merge ");

printf("\n3对称0退出\ n ");

printf("请选择(0-3)\ n ");

scanf("%d ",select);

开关(选择){

案例1:

InitList(L);

create list _ Sorted(L);

遍历(L,print data);

printf(" \ n输入插入的元素\ n ");

scanf("%d ",e);

插入(L,e);

遍历(L,print data);

打破;

案例二:

InitList(L1);

create list _ Sorted(L1);

导线(L1,打印数据);

InitList(L2);

create list _ Sorted(L2);

导线(L2,打印数据);

InitList(L);

合并列表(L1,L2,L);

遍历(L,print data);

打破;

案例三:

InitList(L);

创建列表(L);

遍历(L,print data);

if (Symmetric(L)) printf("Yes!\ n ");else printf(" Not \ n ");

打破;

案例0:破;

默认值:printf("错误!再试一次!\ n ");

}

}while(选择);

}

/*单向链表相关操作示例*/

/*类型定义和头文件,文件名为sllink.h*/

#包含stdio.h

#包含stdlib.h

typedef int ElemType//元素的实际类型

typedef结构LNode{

元素类型数据;

struct LNode * next

}LNode,* LinkList//定义节点和指针类型名称。

//建立无序链表的插头方法

void CreateList(链表L){

链表p;

elem type e;

l =(LinkList)malloc(sizeof(LNode));

l-next = NULL;

Printf("头插入法建立链表,以0结尾\ n ");

scanf("%d ",e);

while(e){

p =(LinkList)malloc(sizeof(LNode));

p-data = e;

p-next = L-next;

l-next = p;

scanf("%d ",e);

}

}

/*非递减有序单向链表L插入元素E序列仍按顺序*/

void Insert_Sort(链表L,元素类型e){

链表p,s;

s =(LinkList)malloc(sizeof(LNode));

s-data = e;

p = L;

while(p-nextp-next-data=e)

p = p-next;/*查找插入位置*/

s-next = p-next;/* Insert语句*p节点,然后插入*s节点*/

p-next = s;

}

/*建立一个递增有序的单向链表*/

void Create_Sort(链表L){

elem type e;

l =(LinkList)malloc(sizeof(LNode));

l-next = NULL;

Printf("构建有序表,输入任意整数数据,以0结尾\ n ");

scanf("%d ",e);

while(e){

Insert_Sort(L,e);

scanf("%d ",e);

}

}

/*单向链表的遍历*/

无效遍历(链表L){

链表p;

Printf("遍历链表");

for(p = L-next;p;p = p-下一个)

printf("]",p-data);

printf(" \ n ");

}

/*删除元素e*/

无效删除(链表L,元素类型e){

链表p,q;

p = L;

q = L-next;

while(q q-data!=e){//找到元素的删除位置。

p = q;

q = q-next;

}

如果(!q)printf(" \ n未删除");/*元素e*/

else { p-next = q-next;/*找到删除*/

免费(q);}

}

/*单向链表的反转*/

void exch(链表L){

链表p,s;

p = L-next;

l-next = NULL;

while(p){

s = p;

p = p-next;

s-next = L-next;

l-next = s;

}

}

/*两个非减有序单向链表合并后仍然是非减序列*/

void MergeIncrease(链表La,链表Lb,链表Lc){

链表p,q,s,后;

p = La-next;

q = Lb-next;

Lc =后方= La

免费(磅);

while(pq){

if(p-dataq-data){ s = p;p = p-next;}

else { s = q;q = q-next;}

rear-next = s;/*较小的元素插入页脚*/

后方=后方-下一个;

}

if(p)rear-next = p;else rear-next = q;

}

/*主函数部分,文件名为sllink.c*/

//#包含" sllink.h "

void main(){

链表La,Lb,Lc;

elem type e;

int select

做{

Printf(" 1创建一个无序的表,然后删除指定的元素\ n ");

Printf(" 2。创建增量有序表,然后反转\ n ");

Printf(" 3)创建两个增量有序表,并组合成一个仍在增长的表\ n ");

Printf(" 0退出,请输入一个选项(0-3)\ n ");

scanf("%d ",select);

开关(选择){

案例0:

打破;

案例1:

创建列表(La);

遍历(La);

Printf("输入要删除的元素\ n ");

scanf("%d ",e);

删除(La,e);

遍历(La);

打破;

案例二:

create _ Sort(La);

遍历(La);

exch(La);

printf("交换的列表\ n ");

遍历(La);

打破;

案例三:

create _ Sort(La);遍历(La);

create _ Sort(Lb);横移(磅);

MergeIncrease(La,Lb,Lc);遍历(Lc);

打破;

默认值:

Printf("输入选项错误,请重新输入!\ n ");

}

}while(选择);

}

不知道这些内容能不能帮到你。

相关文章

发表新评论