#include <malloc.h>
typedef struct nlist
{
int *np
int len//已使用地址个数
int maxlen//最大地址个数
}NLT
NLT *createlist()//创建顺序表
int addtolist(NLT *nlist)//向顺序表插入元素
void pList(NLT *nlist)//遍历顺序表
int main()
{
int i
NLT *nlist=createlist()
if(nlist)
{
for(i=0i<nlist->maxleni++)
addtolist(nlist)
pList(nlist)
}
return 0
}
void pList(NLT *nlist)//遍历打印,空格分割,最后一个数后面没有空格
{
int i
for(i=0i<nlist->len-1i++)
printf("%d ",nlist->np[i])
printf("%d",nlist->np[nlist->len-1])
}
NLT *createlist()
{
NLT *nlist=NULL
nlist=(NLT *)malloc(sizeof(NLT))
scanf("%d",&nlist->maxlen)
nlist->np=(int *)malloc(sizeof(int)*nlist->maxlen)
if(!nlist || !nlist->np)
{
printf("内存申请失败!\n")
return NULL
}
nlist->len=0
return nlist
}
int addtolist(NLT *nlist)
{
if(nlist->len<nlist->maxlen)//如果存储空间未满,保存元素,保存成功返回1 失败返回0
{
scanf("%d",&nlist->np[nlist->len])
nlist->len++
return 1
}
else //这里可以写当存储满的之后,空间扩容,本题用不到所以我不写了
return 0
}
1、单链表中头结点有两个作用:一是标识该链表的存在,而是可以通过头结点遍历整个链表。所以不能通过移动头结点指针遍历链表,因为一旦移动了,下次就无法定位该链表。
2、例程:
#include "stdio.h"#include "stdlib.h"
#define NULL 0
#define Error 0
typedef struct LNode{
int data
struct LNode *next
}LNode,*LinkList
LinkList CreatList(LinkList,int)
LinkList CreatList(LinkList L,int n)
{
LinkList p
int i
L=(LinkList)malloc(sizeof(LNode))
L->next=NULL
for(i=ni>0--i){
p=(LinkList)malloc(sizeof(LNode))
scanf("%d",&p->data)
p->next=L->next
L->next=p
}
return L
}
void Getelem(LinkList L)
//遍历链表
{
LinkList q
q=L->next
for(q->nextqq=q->next)
printf("%d",q->data)
}
void main(){
LinkList L
int a
puts("请输入链表长度:")
scanf("%d",&a)
L=CreatList(L,a) //L要接收函数返回指针
Getelem(L)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)