#include<stdio.h>
#include<stdlib.h>
typedef struct {
char no[8]; //8位學號
char name[20]; //姓名
int score; //成績
}Student;
typedef struct LNode{
Student data; //資料域
struct LNode *next; //指標域
}LNode,*LinkList;
int InitList(LinkList l) // l不用加*,已經是指標
{
l=(LinkList)malloc(sizeof(LNode));
l->next=NULL; //頭結點
return 1;
}
int createlist(LinkList l,int n)
{
for(int i=n;i>=1;i--)
{
LinkList p; //前插法創建串列 創建指標(不是Student型別)
p=(LinkList)malloc(sizeof(LNode));
printf("請輸入學生的學號,成績及姓名:");
scanf("%s %d %s",p->data.no,&p->data.score,p->data.name); //注意. 和.>使用
p->next=l->next;
l->next=p; //相當于在l后插入p結點
}
return 1;
}
int showlist(LinkList l)
{
LinkList p=l->next;
while(NULL != p)
{
printf("%s %d %s\n",p->data.no,p->data.score,p->data.name);
p=p->next;
}
printf("\n");
return 1;
}
LNode *Inverse(LinkList L)
{
LinkList p,q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
return L;
}
int main()
{
LNode L;
int n;
if(InitList(&L))
printf("初始化鏈表成功。\n");
else
printf("初始化鏈表失敗。\n");
printf("請輸入學生個數:\n");
scanf("%d",&n);
if(createlist(&L,n))
printf("創建鏈表成功。\n");
else
printf("創建鏈表失敗。\n");
Inverse(&L);
showlist(&L);
return 0;
}
uj5u.com熱心網友回復:
LNode *Inverse(LinkList L){
LinkList p,q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
return L;
}
這個函式應該有問題,把主函式中 Inverse(&L); 注釋掉可以正常運行
uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
char no[8]; //8位學號
char name[20]; //姓名
int score; //成績
}Student;
typedef struct LNode{
Student data; //資料域
struct LNode *next; //指標域
}LNode,*LinkList;
//int InitList(LinkList l) // l不用加*,已經是指標
int InitList(LinkList *l) // l不用加*,已經是指標
{
*l=(LinkList)malloc(sizeof(LNode));
(*l)->next=NULL; //頭結點
return 1;
}
int createlist(LinkList l,int n)
{
for(int i=n;i>=1;i--)
{
LinkList p; //前插法創建串列 創建指標(不是Student型別)
p=(LinkList)malloc(sizeof(LNode));
printf("請輸入學生的學號,成績及姓名:");
scanf("%s %d %s",p->data.no,&p->data.score,p->data.name); //注意. 和.>使用
p->next=l->next;
l->next=p; //相當于在l后插入p結點
}
return 1;
}
int showlist(LinkList l)
{
LinkList p=l->next;
while(NULL != p)
{
printf("%s %d %s\n",p->data.no,p->data.score,p->data.name);
p=p->next;
}
printf("\n");
return 1;
}
LNode *Inverse(LinkList L)
{
LinkList p,q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
return L;
}
int main()
{
LinkList L;
int n;
if(InitList(&L))
printf("初始化鏈表成功。\n");
else
printf("初始化鏈表失敗。\n");
printf("請輸入學生個數:\n");
scanf("%d", &n);
if(createlist(L,n))
printf("創建鏈表成功。\n");
else
printf("創建鏈表失敗。\n");
//showlist(L);
Inverse(L);
showlist(L);
return 0;
}
供參考~
改了main函式里的L型別,如果定義成lnode型別,那就不需要初始化鏈表頭節點了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/98875.html
標籤:C語言
下一篇:pcl顯示點云程式,vs2015報錯無法打開源檔案pcl/visualization/cloud_viewer.h
