堆串基础【C语言】
实现堆串的建立、插入、删除、显示。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char *ch;
int len;
}Hstring;
void create(Hstring *h)
{
h->ch=(char*)malloc(h->len);
scanf(" %[^\n]",h->ch);
}
void insert(Hstring *s,int pos,Hstring *t)
{
char *temp;
temp=(char*)malloc(s->len+t->len);
if(pos<0 || pos >s->len || s->len==0)
{
printf("插入位置不合法...\n");
return;
}
if(temp==NULL)
{
return;
}
int i;
for(i=0;i<pos;i++)
{
temp[i]=s->ch[i];
}
for(i=0;i<t->len;i++)
{
temp[i+pos]=t->ch[i];
}
for(i=pos;i<s->len;i++)
{
temp[i+t->len]=s->ch[i];
}
s->len+=t->len;
free(s->ch);
s->ch=temp;
}
void delete(Hstring *s,int pos,int number)
{
char *temp;
temp=(char*)malloc(s->len-number);
int i;
for(i=0;i<pos-1;i++)
{
temp[i]=s->ch[i];
}
for(i=0;i<s->len-number;i++)
{
temp[i+pos-1]=s->ch[i+pos+number-1];
}
free(s->ch);
s->ch=temp;
}
void view(Hstring *h)
{
printf("输出--堆串的长度为:%d\n",h->len);
printf("输出--堆串为:%s\n",h->ch);
}
int main()
{
Hstring h1;
Hstring h2;
int num;
int pos;
printf("输入--串h1的长度:\n");
scanf("%d",&num);
printf("输入--串h1:\n");
h1.len=num;
create(&h1);view(&h1);
printf("输入--串h2的长度:\n");
scanf("%d",&num);
printf("输入--串h2:\n");
h2.len=num;
create(&h2);view(&h2);
printf("进行--堆串h2插入h1\n");
printf("输入--插入位置:\n");
scanf("%d",&pos);
insert(&h1,pos,&h2);
view(&h1);
printf("进行--删除操作...\n");
printf("输入--开始删除的起始位置:\n");
scanf("%d",&pos);
printf("输入--删除的位数:\n");
int number;
scanf("%d",&number);
delete(&h1,pos,number);
view(&h1);
return 0;
}
输入--串h1的长度:
5
输入--串h1:
abcde
输出--堆串的长度为:5
输出--堆串为:abcde
输入--串h2的长度:
3
输入--串h2:
xxx
输出--堆串的长度为:3
输出--堆串为:xxx
进行--堆串h2插入h1
输入--插入位置:
2
输出--堆串的长度为:8
输出--堆串为:abxxxcde
进行--删除操作...
输入--开始删除的起始位置:
3
输入--删除的位数:
3
输出--堆串的长度为:8
输出--堆串为:abcde
Program ended with exit code: 0
Copyright © 2019 wyq. All rights reserved. |
---|