C语言创建单链表如下:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include "iostream.h"
typedef struct node
{
int data
node * next
}node , * List
void create(int n)
{
int c
List s,L
L=(List)malloc(sizeof(node))
L->next=NULL
printf("请输入第1个数据:")
scanf("%d",&c)
L->data=c
for(int i=2i<=ni++)
{
s=(List)malloc(sizeof(node))
printf("请输入第%d个数据:",i)
scanf("%d",&c)
s->data=c
s->next=L
L->next =s
}
printf("链表创建成功!")
}
void main()
{
int n
printf("请你输入链表的个数:")
scanf("%d",&n)
create(n)
}
单链表创建方法:
单链表的建立有头插法、尾插法两种方法。
1. 头插法
单链表是用户不断申请 存储单元和改变链接关系而得到的一种特殊 数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。
由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请 存储空间可使用malloc()函数实现,需设立一申请单元 指针,但malloc()函数得到的指针并不是指向 结构体的指针,需使用 强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head 指针为NULL。
链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。
2. 尾插法
若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头 指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是 头结点。
首先,你真的确定你知道什么是链表,什么是顺序表?好了,算了就按题中的顺序表来写喽(不过,我真的建议你,如果你真不清楚,请把它弄清楚,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)