C语言链表实现字符串压缩, 求大神帮助啊,跪谢。...

样例是这样滴,上机课的题,真心求帮助,大神们,我需要你们
11222335556444444222
21322335166432

1BBBBBB3AAA3BBB
116B133A133B
要用结构体和指针,可是我连数组都不会,求大神啊,orz

/*

请输入表达式:11222335556444444222

21322335166432

请输入表达式:1BBBBB3AAA3BBB

115B133A133B

请输入表达式:


请输入表达式:^Z

Press any key to continue

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stack {
char ch;
int size;
struct stack *next;
}*STACK,NODE,*pNode;

STACK InitStack() {
STACK S = (pNode)malloc(sizeof(NODE));
S->ch = 0;
S->size = 0;
S->next = NULL;
return S;
}

int Empty(STACK S) {
return S->next == NULL;
}

int NotEmpty(STACK S) {
return S->next != NULL;
}

bool GetTop(STACK S, char &c) {
if(Empty(S)) return false;
c = S->next->ch;
return true;
}

void Push(STACK S, char e) {
char c;
pNode newnode = (pNode)malloc(sizeof(NODE));
if(GetTop(S,c) && c == e) {
++S->next->size;
return;
}
newnode->ch = e;
newnode->size = 1;
newnode->next = S->next;
S->next = newnode;
}

bool Pop(STACK S, char &ch, int &size) {
pNode p;
if(Empty(S)) return false;
    p = S->next;
    ch = p->ch;
size = p->size;
S->next = p->next;
free(p);
    return true;
}

int main() {
STACK S = InitStack();
char expression[100],*p,c;
int len,i,sz;
    printf("请输入表达式:");
    while(gets(expression) != NULL) {
len = strlen(expression);
p = expression + len - 1;
for(i = len - 1; i >= 0; --i,--p) Push(S,*p);
while(Pop(S,c,sz)) printf("%d%c",sz,c);
printf("\n请输入表达式:");
}
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-27
#include <stdio.h>
typydef struct ch
{
char c;//字符

int num;//字符个数

}Ch;
typedef struct list
{
Ch cha;

Ch *next;

}List;
void main()//以“aaaaabbbbbb”为例

{
List *head; //头结点
List *l = (List*)malloc(sizeof(List));

l->cha.c = a;

l->cha.num = 5;

head =l;

l ->next= (List*)malloc(sizeof(List));
l = l->next;

l->cha.c = b;

l->cha.num = 6;

l->next =NULL;

l = head;

while(l != NULL)

{
for(int i =0; i< l->cha.num;i++)

printf("%c");

l = l->next;

}

}
第2个回答  2014-04-26
把具体题目发出开看看。
第3个回答  2014-04-26
你是自学的吗,没有学数组就开始上机??追问

大一新生,讲的太快了,会么? 可以帮我吗

追答

还是新生,都快成为师哥师姐了。
void yasu(char *s)
{

char *p;
char reschar[100];//存放压缩后的字符串
memset(reschar,NULL,sizeof(reschar)); //字符串赋值为空
p=s;
int count=1;
int k=0;

int len=strlen(s);

for (int i=0;i=10)&&(count<100))
{
int d1=count%10;
int d2=(count/10)%10;
reschar[k++]=d2+'0';
reschar[k++]=d1+'0';
}
else
{

reschar[k++]=count+'0';

}

// itoa(count,reschar[k++],10);

count=1;
}

}
printf("%s\n",reschar);

}

追问

额。。。。你说的有道理
太感谢了,是用的结构体吗?

追答

求你了,看看代码行不,里面那里有结构体了,那是数组好不好。

追问

数组在线测评零分,老师不让用数组,只让用结构体和指针,不是我决定的啊。。。T T

追答

那里用结构体呗,不是已经给你实现的大体思路了吗

相似回答