您的位置:首页 > 其它

用双向链表对字符串进行排序

2011-07-11 10:46 239 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct string{
char *s;
struct string *next;
struct string *prior;
}str;

void PrintLink(str* node);
str* InitLink();
int LinkNum(str* head);
str* GetTail(str* head,int num);
void SortLink(str* head,str* tail);
int main(void)
{
str* head;
str* tail;
head = InitLink();
int num = 0;
num = LinkNum(head);
tail = GetTail(head,num);
SortLink(head,tail);
PrintLink(head);
}
str* GetTail(str *head,int num)
{
str* p;
int sum = 0;

p = (str*)malloc(sizeof(str));
p = head;
while(p != NULL)
{
sum++;
p = p->next;
if(num-1 == sum)
{
return p;
}
}
}
str* InitLink()
{
char st[50];
str *head,*ps,*lochead,*tail;
head = (str *)malloc(sizeof(str));
tail = (str *)malloc(sizeof(str));
lochead = head;
while(1)
{

ps = (str *)malloc(sizeof(str));
lochead->next = ps ;
ps->prior = lochead ;
printf("input data:");
scanf("%s",st);
ps->s = (char*)malloc(strlen(st)*sizeof(char));
strcpy( ps->s , st);
printf("listInfo:%s",ps->s);
lochead = ps;
printf("输入exit退出:");
scanf("%s",st);
if(!strcmp("exit",st))
break;
}
head = head->next;
head->prior= NULL;
lochead->next = NULL;
return head;
}

void PrintLink(str* node)
{
str* q;
q = (str *)malloc(sizeof(str));
printf("Now the link: ");
do
{
q=node;
printf("%s ",(node->s));
node=node->next;
free(q);
}
while(node!=NULL);
char c;
c = getchar();
}

int LinkNum(str* head)
{
int sum = 0;
str* p;
p = head;
while(p != NULL)
{
p = p->next;
sum++;
}
return sum;
}

void SortLink(str* head,str* tail)
{
str *q,*p,*flag;
q = (str*)malloc(sizeof(str));
p = (str*)malloc(sizeof(str));
flag = (str*)malloc(sizeof(str));
flag = head;
p = tail;
q = NULL;

while (flag != NULL)
{
flag = NULL;

for (q = head; q != p; q = q->next)
{
if (strcmp((q->s),(q->next->s)) > 0)
{
// char* t= (char *)malloc( q->num * sizeof(char) );
char* t = (char *)malloc(strlen(q->s)*sizeof(char));
//*t =* (q->s);
strcpy(t,q->s);
//*(q->s) = *(q->next->s);
strcpy(q->s,q->next->s);
//*(q->next->s) = *t;
strcpy(q->next->s,t);
flag = q;
}
}

p = flag;
}
}

对比一下整形,看看有什么变化,我是在LINUX环境下写的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: