1 回答

TA貢獻1802條經(jīng)驗 獲得超4個贊
void CreateList(LinkList * &L, StaffBill a[], int n) //尾插法建鏈表L
這里的第二個參數(shù)是這個結(jié)構(gòu)體數(shù)組,所以在實際調(diào)用過程中應(yīng)該以數(shù)組名來作為實參即main函數(shù)中調(diào)用時 直接寫成 CreateList(L, Info, 3)即可;此處你定義的結(jié)構(gòu)體數(shù)組就三個數(shù)據(jù)info[0];info[1]以及info[2] ,所以再調(diào)用CreateList函數(shù)時 使用info[3]會造成數(shù)組越界;另外就是 你整個程序中也有許多其他錯誤,下邊是我 改寫之后的,你可以做參考
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct info
{
int no;
char name[20];
int depno;
int salary;
}StaffBill;
typedef struct LNode
{
StaffBill data;
struct LNode * next;
}LinkList;
LinkList *CreateList(StaffBill a[], int n); //函數(shù)原型
void DispList(LinkList *L);
LinkList *CreateList(StaffBill a[], int n) //尾插法建鏈表L
{
LinkList *s,*pHead,*pTail;
int i;
pHead = (LinkList *) malloc(sizeof(LinkList));
pTail = pHead;
pTail->next = NULL;
for (i = 0; i < n; i++)
{
s = (LinkList *) malloc(sizeof(LinkList));
s->data = a[i];
pTail->next = s;
s->next = NULL;
pTail = s;
}
return pHead;
}
void DispList(LinkList *L) //輸出鏈表L
{
LinkList* p = L->next;
while (p != NULL)
{
printf("%d %s %d %d\n", p->data.no, p->data.name, p->data.depno, p->data.salary);
p = p->next;
}
printf("\n");
}
void main()
{
StaffBill Info[3] = {
{33541, "德維恩.韋德", 003, 115500},
{ 33677, "勒布朗.詹姆斯", 006, 150000 },
{ 33431, "科比.布萊恩特", 024, 100000 }
};
LinkList *L = NULL;
L = CreateList(Info, 3); //注意這里的實參 為數(shù)組名,此時返回的是一個鏈表
DispList(L);
}
添加回答
舉報