对称对称语言
/*这个问题的关键是如何交换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(选择);
}
不知道这些内容能不能帮到你。
最后更新于 2023-10-08 17:40:40 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章