串顺序存储
发布时间: 2022-07-20 16:59:21
A. 串的顺序存储结构和链式存储结构该怎样表示呀!
顺序存储结构就是 数组比如int a[5],通过下标引用;
链式存储就是 链表
B. c++串的顺序存储结构,尽量简单【四个功能,增删改查】
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructNode
{
chardata;
structNode*next;
}node;
voidInsert(node*);//插入
voidFind(node*);//查找
intCount(node*);//链表长度
voidUpdate(node*);//修改
voidDelete(node*);//删除
voidShow(node*);//输出
intmain()
{
inta;
nodehead;
head.next=NULL;
printf("***********链表的操作************ ");
while(1)
{
a=0;
printf("***********请选择您的操作*********** ");
printf("1链表的插入 2链表的查找 3链表的修改 4链表的删除 5链表的输出 6退出系统 ");
scanf("%d",&a);
switch(a)
{
case1:
Insert(&head);
break;
case2:
Find(&head);
break;
case3:
Update(&head);
break;
case4:
Delete(&head);
break;
case5:
Show(&head);
break;
case6:
exit(-1);
break;
default:
printf("输入错误!");
break;
}
}
return0;
}
intCount(node*head)
{
node*pH=head;
intcount=0;
while(pH->next!=NULL)
{
pH=pH->next;
count++;
}
returncount;
}
voidInsert(node*head)
{
intwhich=0;
inti=0;
intj=1;
charch;
node*pH=head;
printf(" 1.首插入2.未插入3.插入到位置i ");
printf("请选择:");
scanf("%d",&which);
ch=getchar();
if(which==1)
{
printf("请输入值:");
scanf("%c",&ch);
node*q=(node*)malloc(sizeof(Node));
q->data=ch;
q->next=pH->next;
pH->next=q;
}
elseif(2==which)
{
while(pH->next!=NULL)
{
pH=pH->next;
}
printf("请输入值:");
scanf("%c",&ch);
node*q=(node*)malloc(sizeof(Node));
q->data=ch;
q->next=pH->next;
pH->next=q;
}
elseif(3==which)
{
printf("请输入i的值:");
scanf("%d",&i);
ch=getchar();
if((i>0)&&(i<=Count(head)+1))
{
printf("i=%d",i);
while(j<i)
{
pH=pH->next;
j++;
}
printf("请输入值:");
scanf("%c",&ch);
node*q=(node*)malloc(sizeof(Node));
q->data=ch;
q->next=pH->next;
pH->next=q;
}
else
{
printf("i输入错误! ");
}
}
else
{
printf("选择错误! ");
}
return;
}
voidShow(node*pH)
{
printf("链表输出: ");
if(pH->next==NULL)
{
printf("链表为空! ");
return;
}
else
{
while(pH->next!=NULL)
{
pH=pH->next;
printf("%3c",pH->data);
}
printf(" 输出结束! ");
}
}
voidFind(node*head)
{
intwhich=0;
intj=0;
inti=0;
charch;
boolis_have=false;
node*q=head->next;
if(Count(head)==0)
{
printf("链表为空!无法查找. ");
return;
}
printf("1.查找内容的位置2.查找位置的内容 ");
scanf("%d",&which);
ch=getchar();
if(1==which)
{
printf("请输入要查找的内容:");
scanf("%c",&ch);
while(q!=NULL)
{
j++;
if(q->data==ch)
{
printf("%c是第%d个。 ",ch,j);
is_have=true;
}
q=q->next;
}
if(is_have==false)
{
printf("所查找的内容在链表中不存在!");
}
}
elseif(2==which)
{
j=0;
printf("请输入要查找的位置:");
scanf("%d",&i);
if(i>Count(head)||i<1)
{
printf("位置错误!无法查找。 ");
return;
}
while(q!=NULL&&j<i-1)
{
q=q->next;
j++;
}
printf("内容为:%c",q->data);
}
else
{
printf("选择错误! ");
}
return;
}
voidUpdate(node*head)
{
node*q=head->next;
inti=0;
intj=0;
charch;
if(Count(head)==0)
{
printf("链表为空!无法查找. ");
return;
}
printf("请输入要修改的位置:");
scanf("%d",&i);
ch=getchar();
if(i>Count(head)||i<1)
{
printf("位置错误!无法修改。 ");
return;
}
printf("请输入修该的值:");
scanf("%c",&ch);
while(q!=NULL&&j<i-1)
{
q=q->next;
j++;
}
q->data=ch;
printf("修改成功! ");
return;
}
voidDelete(node*head)
{
node*q=head->next;
node*p=head;
inti=0;
intj=0;
charch;
if(Count(head)==0)
{
printf("链表为空!无法删除. ");
return;
}
printf("1.全部删除2.删除单个 ");
scanf("%d",&i);
ch=getchar();
if(1==i)
{
while(q!=NULL)
{
p=p->next;
q=q->next;
free(p);
}
head->next=NULL;
printf("释放成功! ");
}
elseif(2==i)
{
printf("请输入要删除的位置:");
scanf("%d",&i);
ch=getchar();
if(i>Count(head)||i<1)
{
printf("位置错误!无法删除。 ");
return;
}
while(q!=NULL&&j<i-1)
{
p=p->next;
q=q->next;
j++;
}
p->next=q->next;
free(q);
printf("删除成功! ");
}
else
{
printf("选择错误! ");
}
}
C. 顺序存储方式串的基本操作是什么
1.串联结concat串联结concat函数是用T返回由S1和S2联结而成的新串。由于串长固定,因此超过串长的串值必须舍去,称为“截断”。假设S1、S2和T都是SString型的串变量,且串T是由串S1联结得到的,即串T的值的前一段和串S1的值相等,串T的值的后一段和串S2的值相等,则只要进行相应的“串值复制”操作即可,只是需要约定,对超长部分实施“截断”操作。基于串S1和S2长度的不同情况,串T值的产生可能有2种情况:①S1[0]+S2[0]≤MAXSTRLEN时,得到串T的正确结果;②S1[0]<MAXSTRLEN,而S1[0]+S2[0]>MAXSTRLEN时,则将串S2的一部分截断,得到的串T只包含S2的一个子串;③S1[0]=MAXSTRLEN时,则得到的串T并非联结结果,而和串S1相等。在这里仅考虑能正确联结的情况,即S1[0]+S2[0]<MAXSTRLEN,
D. 字符串在小字节序计算机中是按什么顺序存储的
也依然是按照字节顺序存储的,例如字符串“abc”在内存中的连续四个字节分别是0x61、0x62、0x63、0x00。
E. 3 串顺序存储的结束标记是什么
。'