c语言利用栈将字符串逆置,借助栈实现单链表逆置

#include

#include

#include

#define OK 1

#define ERROR 0

typedef struct

{

char *Name;

char *Number;

char *Sex;

int Age;

char *Class;

char *Evaluate;

} StudentRecord;

typedef struct LinkedStack

{

StudentRecord Record;

struct LinkedStack *next;

} Lin_Sta;

int InitStack(Lin_Sta **StackHead)

{

*StackHead = (Lin_Sta*)malloc(sizeof(Lin_Sta));

if(!*StackHead)

{

exit(ERROR);

}

(*StackHead)->next = NULL;

return OK;

}

void Copy_Record(StudentRecord *record1,char *name,char *number,

char *sex,char *clas,char *evaluate,int age)

{

record1->Name = (char *)malloc(strlen(name) + 1);

strcpy(record1->Name,name);

record1->Number = (char *)malloc(strlen(number) + 1);

strcpy(record1->Number,number);

record1->Sex = (char *)malloc(strlen(sex) + 1);

strcpy(record1->Sex,sex);

record1->Class = (char *)malloc(strlen(clas) + 1);

strcpy(record1->Class,clas);

record1->Evaluate = (char *)malloc(strlen(evaluate) + 1);

strcpy(record1->Evaluate,evaluate);

record1->Age = age;

}

void CreatStack(Lin_Sta *StackHead,int Length)

{

Lin_Sta *p,*head = StackHead;

char name[80],number[18],sex[13],clas[80],evaluate[80];

int age;

while(Length --)

{

p = (Lin_Sta*)malloc(sizeof(Lin_Sta));

scanf("%s%s%s",name,number,sex);

scanf("%d",&age);

scanf("%s%s",clas,evaluate);

Copy_Record(&p->Record,name,number,

sex,clas,evaluate,age);

p->next = head->next;

head->next = p;

}

}

/**

**/

void display(Lin_Sta *StackHead)

{

Lin_Sta *p = StackHead->next;

while(p->next != NULL)

{

printf("%s %s %s %d %s %s/n",p->Record.Name,p->Record.Number,p->Record.Sex,

p->Record.Age,p->Record.Class,p->Record.Evaluate);

p = p->next;

}

printf("%s %s %s %d %s %s",p->Record.Name,p->Record.Number,p->Record.Sex,

p->Record.Age,p->Record.Class,p->Record.Evaluate);

}

int main()

{

Lin_Sta *StackHead;

int Length;

scanf("%d",&Length);

InitStack(&StackHead);

CreatStack(StackHead,Length);

display(StackHead);

free(StackHead);

StackHead = NULL;

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值