请教用VC++6.0怎样建立一个单链表

请教用VC++6.0怎样建立一个单链表,第1张

#include<stdio.h>

#include<stdlib.h>

typedef struct Node

{

int element

struct Node *link

} Node

typedef struct SingleList

{

struct Node *first

int n

} SingleList

void mulu()

{

printf("请根据以下提示 *** 作:\n")

printf("1. 检索一个位置上的元素\n")

printf("2. 定位插入一个元素\n")

printf("3. 定位删除一个元素\n")

printf("4. 撤销\n")

printf("ATTENTION:本链表序号从0开始!!!!!!\n")

}

void Init(SingleList *list)

{

list->first=NULL

list->n=0

}

void Find(SingleList L,int i,int* x)

{

Node *p

if(i<0 || i>L.n-1)

{

printf("超出范围!\n")

return

}

p=L.first

for(int j=0j<ij++)

{

*x=p->element

p=p->link

}

}

void Insert(SingleList *L,int i,int x)

{

Node *p,*q

if(i<-1 || i>L->n)

{

printf("超出范围!\n")

return

}

p=L->first

for(int j=0j<ij++)

{

p=p->link

}

q=(Node*)malloc(sizeof(Node))

q->element=x

if(i>-1 && i<L->n)

{

q->link=p->link

p->link=q

}

else if(i==L->n)

{

q->link=NULL

p->link=q

}

else if(i==-1)

{

q->link=L->first

L->first=q

}

L->n++

}

void Delete(SingleList *L,int i)

{

Node *p

if(i<0 || i>L->n-1)

{

printf("超出范围!\n")

return

}

p=L->first

for(int j=0j<ij++)

{

p=p->link

}

if (i==0)

{

L->first=p->link

else

{

p->link=p->link->link

}

L->n--

}

void Output(SingleList L)

{

Node *p

if(!L.n)

{

return

}

p=L.first

while(p)

{

printf("%d, ",p->element)

p=p->link

}

}

void Destroy(SingleList *L)

{

Node *p

while(L->first)

{

p=L->first->link

free(L->first)

L->first=p

}

}

int main()

{

int i=0,n=0

int x=0,size=0

SingleList list

printf("请输入线性表的数据个数:")

scanf("%d",&size)

Init(&list)

list.n=size

list.first=(Node*)malloc(sizeof(Node))

for(int j=0 j<size j++)

{

Insert(&list, j, 0)

list.n--

}

printf("\n")

mulu()

while(1)

{

printf("请按照目录的提示完成 *** 作:")

scanf("%d",&n)

switch(n)

{

case(1):

{

printf("请输入要查询的位置:")

scanf("%d",&i)

Find(list,i,&x)

printf("%d\n",x)

system("pause")

break

}

case(2):

{

printf("请输入位置和值,中间用一个空格间隔:")

scanf("%d %d",&i,&x)

Insert(&list,i,x)

system("pause")

break

}

case(3):

{

printf("请输入要删除的位置:")

scanf("%d",&i)

Delete(&list,i)

system("pause")

break

}

case(4):

{

Destroy(&list)

system("pause")

break

}

}

}

return 0

}

这是一个简单单链表的实例,用的不是类是结构体,但是总体思路是和结构是相同的。

希望可以帮到你

这是一个地址传递出现的错误,怎样才能避免这样的错误呢,还得从本质上去看指针和真实的值之间的联系和区别,认真区分两者之间的不同。

#include<stdio.h>

#include<malloc.h>

typedef struct node

{

int data

struct node *next

}slink

void createlisk(slink *L,int *a,int n)

int main(void)

{

int a[3]={1,2,3},i

slink L,*p

createlisk(&L,a,3)//这里做了点修改,是因为只有申请的实质的变量,这样才能得到他的地址

p=&L

for(i=0i<3i++)

{

p=p->next

printf("%d\n",p->data)

}

}

void createlisk(slink *L,int *a,int n)

{

slink *s,*r

int i

s=(slink *)malloc(sizeof(slink)) //为L指针开辟一条内存区//-----------------------这个地方你就不应该用L来开空间,这样就把传进来的首节点的地址给弄丢了

s->next=NULL//将L执行的下一个指针置为空

r=L//把L的地址给r,除非将另外一个地址给了r,否则 *** 作r就等于 *** 作了L

for(i=0i<ni++)

{

s=(slink *)malloc(sizeof(slink))

s->data=*(a+i)

r->next=s //当i=0时,这时候L->next就存储s的地址

r=s//把s的地址给r,此后对r *** 作并不对L产生变化

}

s->next=NULL//把r执行的地址置为null

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11628487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存