1 回答
TA贡献1802条经验 获得超4个赞
void CreateList(LinkList * &L, StaffBill a[], int n) //尾插法建链表L
这里的第二个参数是这个结构体数组,所以在实际调用过程中应该以数组名来作为实参即main函数中调用时 直接写成 CreateList(L, Info, 3)即可;此处你定义的结构体数组就三个数据info[0];info[1]以及info[2] ,所以再调用CreateList函数时 使用info[3]会造成数组越界;另外就是 你整个程序中也有许多其他错误,下边是我 改写之后的,你可以做参考
#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); //函数原型
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); //注意这里的实参 为数组名,此时返回的是一个链表
DispList(L);
}
添加回答
举报