建立单链表 用C语言方式

Python015

建立单链表 用C语言方式,第1张

首先,你真的确定你知道什么是链表,什么是顺序表?好了,算了就按题中的顺序表来写喽(不过,我真的建议你,如果你真不清楚,请把它弄清楚,ok?)程序代码:(看上去有点多,其实算法很简单的)#include<stdlib.h>

#include<stdio.h>

#include<conio.h>#define LIST_INT_SIZE 1000

#define ERROR 0

#define OK 1typedef struct {

int *elem

int length

int listsize

}ListSqtypedef int StatusStatus Initlist_sq(ListSq *l){

//初始化顺序表

l->elem=(int *)malloc(LIST_INT_SIZE*sizeof(int))

if(!l->elem) exit(ERROR)

l->length =0

l->listsize=LIST_INT_SIZE

return OK

}Status InputList_sq(ListSq *l,int length){

//对顺序表进行输入,输入的长度为:length

//length的区间为[1,1000]

int i

if(length >1000 ||length<1) exit(ERROR)

printf("please input the data:\n")

for(i=0i<lengthi++){

scanf("%d",l->elem+i)

l->length++

}

return OK

}Status OutputList_sq(ListSq *l){

//把顺序表输出

int *p

for(p=l->elemp<=&(l->elem[l->length-1])p++)

printf("%d ",*p)

return OK

}Status ListDelete_sq(ListSq *l,int i){

//删除顺序表中位序为i的元素

//注意i的取值范围!

int *p,*pe

if(i<1 || i>1000) exit(ERROR)

p=&(l->elem[i+1])

pe=&(l->elem[l->length-1])

while(p<=pe){

*(p-1)=*p

p++

}

l->length--

return OK

}Status ConvertList_sq(ListSq *l){

//这个操作就是执行你题目要求的那玩意

int i,j,k

for(i=0i<l->lengthi++){

k=i

for(j=0j<ij++)

if(l->elem[i]==l->elem[j])

ListDelete_sq(l,i)

}

return OK

}

int main(void)

{

ListSq list

int length,status

printf("Creat a new SQlist:\n")

status=Initlist_sq(&list)

if(!status)

{

printf("\aWarning:Failed to Creat the List\n")

getch()

exit(ERROR)

}

else {

printf("succeed to creat!\n")

printf("******** status of the list *********\n")

printf("the length is %d\nthe listsize is %d\n",list.length,list.listsize)

}

printf("Now you could input the data for the list:\n")

printf("How many datas do you want to input:")scanf("%d",&length)

InputList_sq(&list,length)

OutputList_sq(&list)

printf("\nthe result of converting list:")

ConvertList_sq(&list)

OutputList_sq(&list)

putchar('\n')

return 0

}一下是运行结果: 好了,完成任务了。。。算法不难,认真思考就搞定,望楼主坚持下去,不断努力!

对了,要是程序上有什么不懂得,hi我就可以了

do

{

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

p=p->next

}while((p->next)!=NULL)

上面改为:

do

{

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

p=p->next

}while(p!=NULL)