数据结构:用C语言创建一个具有10条学生记录的线性表并输出 数组中每个数组元素的内容为

2024-11-28 12:37:43
推荐回答(1个)
回答1:

#include"stdio.h"
#include

typedef struct Data
{
char num[10];
char name[20]
Int score;
}

typedef struct LNode
{

Data data;
struct LNode *next;
}LinkList;

void CreatListF(LinkList *&L,Data a[],int n) //头插法建表
{
LinkList *s;int i;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i {
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}

void InitList(LinkList *&L) //初始化线性表
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}

int ListEmpty(LinkList *L) //判断线性表是否为空
{
return(L->next==NULL);
}

int ListLength(LinkList *L) //求线性表的长度
{
LinkList *p=L;int n=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}

void DispList(LinkList *L) //输出线性表
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%s",p->data->num);
printf("%s",p->data->name);
printf("%d",p->data->score);
p=p->next;
}
}

int ListInsert(LinkList *&L,int i,Data e) //插入数据元素
{
int j=0;
LinkList *p=L,*s;
while(j {
j++;p=p->next;
}
if(p==NULL)return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; s->next=p->next; p->next=s;
return 1;
}
}

int ListDelete(LinkList *&L,int i,Data &e) //删除数据元素
{
int j=0;
LinkList *p=L,*q;
while(j {
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL)return 0;
e=q->data;
p->next=q->next;
free(q);
return 1;
}
}

int main()
{
Data e,a[10]={{"1","name1",91},{"2","name2",92},{"3","name3",93},{"4","name4",94},{"5","name5",95},{"6","name6",96},{"7","name7",97},{"8","name8",98},{"9","name9",99},{"10","name10",100}};

LinkList *h;

InitList(h); //初始化顺序表h
CreateListR(h,&a[0],10); //依次采用尾插入法插入元素
printf("单链表为:");
DispList(h); printf("\n"); //输出顺序表h

ListDelete(h,3,e); //删除L的第3个元素
printf("删除第3个元素后单链表为:");
DispList(h); printf("\n"); //输出顺序表h

ListInsert(h,5,e); //在第5个元素位置插入e素
printf("在第5 个元素位置上插入'f'后单链表为:");
DispList(h); //输出顺序表h

return 0;
}