當前位置:首頁 » 服務存儲 » 串的定長順序存儲實驗報告
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

串的定長順序存儲實驗報告

發布時間: 2022-11-13 05:02:31

① 以定長順序存儲方式實現串的抽象數據類型中定義的基本操作 要求不得使用c語言的字元串操作函數

這是運行結果:
需要的話給我的地址
/*
在vc++6.0中的輸出結果:
------------------------
請輸入串s1:ABCD
串長為4
串空嗎:0(1:是 0:非空)
拷貝s1生成的串s2為:A B C D
請輸入串s2:123456
串s1 > 串s2
串s1鏈接s2得到的串t為:A B C D 1 2 3 4 5 6
清為空串後,串s1為:
串長為0
串空嗎:1(1:空 0:非空)
求串t的子串,請輸入子串的起始位置,子串長度:3,7
子串s2為:C D 1 2 3 4 5
從串t的第pos個字元起,刪除len個字元,請輸入pos,len:4,4
刪除後的串t為:A B C 4 5 6
在串s2的第3個字元起插入串t後,串s2為:C D A B C 4 5 6 1 2 3 4 5
s2的第3個字母起和t第一次匹配
串t為:C
串s1為:C C
用串s1取代串s2中和串t相同的不重疊的串後,串s2為:C C D A B C C 4 5 6 1 2 3 4 5
Press any key to continue
------------------------------
*/

② C語言(數據結構)怎麼用順序存儲的串的0號單元存放串長度

char裡面放的是字元還是數字,是編程者決定的。如果寫SString[0]=8,存的就是數字;如果寫SString[0]='8',存的就是字元,也就是數字8的ASIIC值

③ 定長順序串與堆串的區別

摘要 1、定長順序存儲結構和堆分配存儲結構都是順序存儲結構,它們的主要區別是前者的串長是固定的,後者的串長是動態

④ 若s和t是兩個採用定長順序存儲表示的串,編寫一個實現串比較運算的函數StrCompare(s,t),當s大於t時返

用 ANSI 標准函數 memcmp 試過嗎? #include <string。h> 。。 頭文4件 i = memcmp( s7, s0, N ); 。。 ANSI 標准函數 memcmp 這里: const void *s2, *s6; 。。 也e就是 x,y 的起始地址 size_t N; 。。 比4的長1度,用多少0個u字元計5算 int i; 。。 比8較結果,0 -- 相等。 memcmp與dstrcmp不d同,strcmp認8字元串結束符\0,memcmp看到\0也q不n認7為4字元串結束,所以3memcmp的「比3較」無k長0度限制,我想可以6比5較順序結構存儲的事。 piρulニry奈x(ωjzc

⑤ 數據結構串聯接程序

gets()函數的參數只能為char *型,你定義為unsigned char肯定是不行的。
還有字元是不能賦值的,要用拷貝函數啊

⑥ 數據結構編程求救

試驗一:

#include<iostream>
#include<string>
using namespace std;

struct List
{
int num;
List *next;
};

List *head=NULL;

List* CreateList()
{
List *pL;
List *pEnd;

pL=new List;
head=pL;
pEnd=pL;
cout<<"請輸入節點的數目,以 0 結束"<<endl;
cin>>pL->num;
while(pL->num!=0)
{
pEnd->next=pL;
pEnd=pL;
pL=new List;
cin>>pL->num;
}

delete pL;
pEnd->next=NULL;
return head;
}
void ShowList(List *head)
{
cout<<endl;
cout<<"鏈表節點如下:"<<endl;
while(head)
{
cout<<head->num<<endl;
head=head->next;
}
}
void InsertList(List *head,int num)
{

List *list =new List;
List *l;
while(head)
{
l=head;
head=head->next;
}
list->num=num;
list->next=NULL;
l->next=list;

}

void DeleteList(List *head, int num)
{

List *l;
if(head->num==num)
{
l=head;
head=head->next;
::head=head;
delete l;
return ;
}

List *l1=head;
while(head)
{
if(head->next==NULL){
cout<<"找不到不要刪除的數字."<<endl;
return ;
}

if(head->next->num==num)
{
l=head->next;
head->next=l->next;
delete l;
::head=l1;
cout<<"操作成功"<<endl;
return ;
}
head=head->next;
}

cout<<"找不到不要刪除的數字."<<endl;
}

int GetListNum(List *head)
{
int num=0;
while(head)
{
num++;
head=head->next;
}

return num;
}

int main()
{
string str;

begin:
cout<<"1->增加鏈表 2->顯示鏈表 3->插入節點 4->刪除節點 5->節點數目"<<endl;
cin>>str;
if(str[0]=='1')
{
CreateList();
}
else if(str[0]=='2')
{
if(head==NULL)
{
cout<<"你的鏈表現在是空的,請增加鏈表"<<endl;
getchar();
getchar();
system("cls");
goto begin;
}
ShowList(head);
}
else if(str[0]=='3')
{
if(head==NULL)
{
cout<<"你的鏈表現在是空的,請增加鏈表"<<endl;
getchar();
getchar();
system("cls");
goto begin;
}
int num;
cout<<"請輸入要插入的數字:"<<endl;
cin>>num;
InsertList(head,num);
}
else if(str[0]=='4')
{
if(head==NULL)
{
cout<<"你的鏈表現在是空的,請增加鏈表"<<endl;
getchar();
getchar();
system("cls");
goto begin;
}
int num;
cout<<"請輸入要刪除的數字:"<<endl;
cin>>num;
DeleteList(head,num);
}
else if(str[0]=='5')
{
cout<<"節點數是:"<<GetListNum(head)<<endl;
}
else
{
cout<<"輸入錯誤,請重新輸入.";
}
if(str[0]!='Q' && str[0]!='q'){

cout<<endl<<endl;
getchar();
getchar();
system("cls");

goto begin;
}

}

試驗二:
#include<iostream>
#include<string>
using namespace std;

struct Stack {
char c;
Stack *pNext;
};

void InitStack(Stack *&s)
{
s=NULL;
}
char Peek(Stack *s)
{
if(s==NULL) {
cout<<"棧是空的."<<endl;
return -1;
}
return s->c;
}
void Push(Stack *&s,Stack *newS)
{
newS->pNext=s;
s=newS;
}
char Pop(Stack *&s)
{
if(s==NULL)
{
cout<<"棧是空的."<<endl;
return -1;
}
Stack *pNext;
char c;
if(s)
{
pNext=s->pNext;
c=s->c;
delete s;
s=pNext;
return c;
}
}
int main()
{

Stack *s;
Stack *s1;
InitStack(s);
long num;
int m;
int k;
char c;
cout<<"輸入一個數:"<<endl;
cin>>num;
cout<<"輸入要轉換的進制:"<<endl;
cin>>k;
while(num!=0)
{
m=num%k;
c=(int('0')+m);
s1=new Stack;
s1->c=c;
Push(s,s1);
num/=k;
}
while(s)
{
cout<<Pop(s);
}
cout<<endl;
}

⑦ 《數據結構(C語言版)》之「串的模式匹配演算法」

# include <string.h>
# include <stdio.h>
# include <stdlib.h>
# define OK 1
# define ERROR 0
typedef int Status;
//串的定長順序存儲結構
# define MAX_STR_LEN 40
typedef char SString[MAX_STR_LEN + 1];//0號單元存放串的長度
Status StrAssign(SString T,char * chars)//生成一個其值等於chars的串T
{
int i;
if (strlen(chars) > MAX_STR_LEN)
{
return ERROR;
}
else
{
T[0] = strlen(chars);
for (i=1; i<=T[0]; ++i)
{
T[i] = * (chars + i - 1);
}
return OK;
}
}
//返回串S的元素的個數
int StrLength(SString S)
{
return S[0];
}
//用Sub返回串S的自第pos個字元起長度為len的子串
Status SubString(SString Sub,SString S,int pos,int len)
{
int i;
if (pos<1 || pos>S[0] || len<0 || len>S[0]-pos+1)
{
return ERROR;
}
for (i=1; i<=len; ++i)
{
Sub[i] = S[pos+i-1];
}
Sub[0] = len;
return OK;
}
//輸出字元串T
void StrPrint(SString T)
{
int i;
for (i=1; i<=T[0]; ++i)
{
printf("%c ",T[i]);
}
printf("\n");
}
//求模式串T的next函數值並存入數組next
void get_next(SString T,int 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];
}
}
}
//求模式串T的next函數修正值並存入數組nextval
void get_nextval(SString T,int nextval[])
{
int i = 1,j = 0;
nextval[1] = 0;
while (i < T[0])
{
if (j==0 || T[i]==T[j])
{
++i;
++j;
if (T[i] != T[j])
{
nextval[i] = j;
}
else
{
nextval[i] = nextval[j];
}
}
else
{
j = nextval[j];
}
}
}
//利用模式串T的next函數求T在主串S中第pos字元之後的位置的KMP演算法
//1=<pos=<StrLength(S)
int Index_KMP(SString S,SString T,int pos,int next[])
{
int i = pos,j = 1;
while (i<=S[0] && j<=T[0])
{
if (j==0 || S[i]==T[j])
{
++i;
++j;
}
else
{
j = next[j];
}
}
if (j > T[0])
{
return i - T[0];
}
else
{
return 0;
}
}
int main(void)
{
int i,* p;
SString s1,s2;
StrAssign(s1,"aaabaaaab");
printf("主串為:");
StrPrint(s1);
StrAssign(s2,"aaaab");
printf("子串為:");
StrPrint(s2);
p = (int *)malloc((StrLength(s2) + 1) * sizeof(int));
get_next(s2,p);
printf("子串的next的數組為:");
for (i=1; i<=StrLength(s2); ++i)
{
printf("%d ",* (p+i));
}
printf("\n");
i = Index_KMP(s1,s2,1,p);
if (i)
{
printf("主串和子串在第%d個字元處首次匹配\n",i);
}
else
{
printf("主串和子串匹配不成功\n");
}
get_nextval(s2,p);
printf("子串的nextval數組為:");
for (i=1; i<=StrLength(s2); ++i)
{
printf("%d ",* (p+i));
}
printf("\n");
printf("主串和子串在第%d個字元處首次匹配\n",Index_KMP(s1,s2,1,p));
printf("求串s1的從第5個字元起長度為5的子串s2:\n");
SubString(s2,s1,5,5);
printf("串s2為:");
StrPrint(s2);
return 0;
}
/*
在vc++6.0中的輸出結果:
------------------------
主串為:a a a b a a a a b
子串為:a a a a b
子串的next的數組為:0 1 2 3 4
主串和子串在第5個字元處首次匹配
子串的nextval數組為:0 0 0 0 4
主串和子串在第5個字元處首次匹配
求串s1的從第5個字元起長度為5的子串s2:
串s2為:a a a a b
Press any key to continue
------------------------------
*/

⑧ 堆串屬於順序存儲

堆串的本質還是順序存儲,只不過內存是動態分配的。

定長順序存儲結構和堆分配存儲結構都是順序存儲結構,它們的主要區別是前者的串長是固定的。後者的串長是動態串的定長順序存儲結構的缺點是限定了串的長度,若超出長度則約定截斷堆分配存儲表示解決上面的問題,它動態分配串值得存儲空間。

串值共享的存儲空間稱之為堆,串的塊鏈存儲,表示該存儲結構為鏈式存儲結構,存儲密度=串值所佔的儲存位/實際分配的存位塊鏈結構。

是結構中包含頭指針、尾指針、當前串長度的一種結構使用塊鏈結構的目的是為了提高存儲密度。串的堆存儲結構,與定長順序串的存儲結構類似,都是用一維數組地址連續的存儲單元存儲串的字元序列,不同的是堆串的存儲空間是在程序執行過程中動態分配的。

定長順序存儲結構和堆分配存儲結構都是順序存儲結構,它們的主要區別是前者的串長是固定的,後者的串長是動態串的定長順序存儲結構的缺點是限定了串的長度,若超出長度則約定截斷堆分配存儲表示解決上面的問題,它動態分配串值得存儲空間。

⑨ 【數據結構】串的定長順序儲存,如何初始化

如果是用字元來存儲,那用length指向它的長度, 存儲如下 data[length++] = ch;

⑩ 假設串採用定長順序存儲結構

#include <stdio.h>
int STRCMP(char *p, char *q)
{
while(*p == *q && *p != '\0'){
p++;
q++;
}
return *p - *q;
}
int main()
{

char str1[128];
char str2[128];
int n;
printf("input str1:\n");
scanf("%s", str1);
printf("input str2:\n");
scanf("%s", str2);
n = STRCMP(str1,str2);
printf("%d", n);
putchar('\n');
return 0;
}