c语言建立单链表的完整代码(单链表的实现 c语言)
数据结构C语言单链表的创建,插入删除和合并程序代码
你看这个应该满足要求吧。我把三种循环方式都用上了:
#includestdio.h
#includemath.h
int isprime(int n)
{
int i,t;
if(n==2)
return 1;
if(n%2==0 || n2)
return 0;
for(i=3,t=(int)sqrt(n);i=t;i+=2)
{
if(n%i==0)
return 0;
}
return 1;
}
void main()
{
int i,a,n;
i=0;
do
{
printf("Input an integer (=1):");
scanf("%d",a);
if(a=1)
break;
}while(++i3);
if(i==3) exit(0);
printf("prime submultiples:\n");
i=1;
n=0;
while(i=a)
{
if(a%i==0)
if(isprime(i))
{
printf("%d ",i);
n++;
if(n%10==0)
printf("\n");
}
i++;
}
帮我编写一个用C语言编写的单链表的建立,和输入输出操作,谢谢各位
linklist
*creatlistr(){
//用尾结点插入法建立一个单链表
linklist
*l,*p,*rear;
//定义linklist型指针变量分别用于存放头结点、待插入的结点、尾结点
int
x;
l=(linklist*)malloc(sizeof(linklist));//为待建立的链表申请地址空间
l-next=null;//建立空的单循环链表
rear=l;
printf("请输出一组数字,并以0为结束符:");
scanf("%d",x);
while(x!=0){
p=(linklist*)malloc(sizeof(linklist));//尾插入法建立循环链表
p-data=x;
rear-next=p;
rear=p;
scanf("%d",x);
}
rear-next=null;
printf("输出删除指定结点后的单循环链表为:");
while
(p-next!=null){
printf("%d
",p-data);
//输出时用空格作为数据之间的间隔
p=p-next;
return
(l);
}
建立单链表 用C语言方式
首先,你真的确定你知道什么是链表,什么是顺序表?好了,算了就按题中的顺序表来写喽(不过,我真的建议你,如果你真不清楚,请把它弄清楚,ok?)程序代码:(看上去有点多,其实算法很简单的)#includestdlib.h
#includestdio.h
#includeconio.h#define LIST_INT_SIZE 1000
#define ERROR 0
#define OK 1typedef struct {
int *elem;
int length;
int listsize;
}ListSq;typedef int Status;Status 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 ||length1) exit(ERROR);
printf("please input the data:\n");
for(i=0;ilength;i++){
scanf("%d",l-elem+i);
l-length++;
}
return OK;
}Status OutputList_sq(ListSq *l){
//把顺序表输出
int *p;
for(p=l-elem;p=(l-elem[l-length-1]);p++)
printf("%d ",*p);
return OK;
}Status ListDelete_sq(ListSq *l,int i){
//删除顺序表中位序为i的元素
//注意i的取值范围!
int *p,*pe;
if(i1 || i1000) 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=0;il-length;i++){
k=i;
for(j=0;ji;j++)
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我就可以了
用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完整程序
这是个很简单的链表创建和输出
#includestdio.h
#includestdlib.h
typedef struct linkednode
{
char data;
struct linkednode *next;
}node,*link_list;//链表节点的结构及重命名
link_list creat()//创建一个链表返回类型是链表的首地址
{
link_list L;
node *p1,*p2;
char data;
L=(node*)malloc(sizeof(node));//开辟存储空间
p2=L;
while((data=getchar())!='\n')//输入回车键时结束输入
{
p1=(node*)malloc(sizeof(node));
p1-data=data;
p2-next=p1;
p2=p1;
}
p2-next=NULL;
return L;
}
void print(link_list L)//把链表输出
{
node *p;
p=L-next;
while(p!=NULL)
{
printf("%c",p-data);
p=p-next;
}
printf("\n");
}
void main()
{
link_list L=NULL;
char x;
printf("请输入链表节点:\n");
L=creat();
print(L);
}
单链表的创建程序(C语言)
#include"stdio.h"
#include"malloc.h"
#define NULL 0
#define L sizeof(struct integer)
struct integer /*定义结构体*/
{
int num;
int zhengshu;
struct integer *next;
};
int n; //纪录链表的长度
struct integer *creat(void) /*创建链表*/
{
struct integer *head;
struct integer *p1,*p2;
n=0;
p1=p2=(struct integer *)malloc(L);
scanf("%d,%d",p1-num,p1-zhengshu);
head=NULL;
while(p1-num!=0)
{
n=n+1;
if(n==1) head=p1;
else p2-next=p1;
p2=p1;
p1=(struct integer *)malloc(L);
scanf("%d,%d",p1-num,p1-zhengshu);
}
p2-next=NULL;
return(head);
}
...
略
求一份实现单链表的基本操作的c语言程序,包括输入元素,谢谢。
#includestdlib.h
#include "nodedef.h"
#define CreateLinklistWay 1 // 0表示头插法创建链表,1表示尾插法创建链表
#if !CreateLinklistWay
/*********************************************************************
* 函数名称:linklist *CreateLinklistHead()
* 函数功能:利用头插法创建链表
* 参 数:无
* 返 回 值:创建完链表后的链表头结点
* 说 明:无
*********************************************************************/
extern linklist *CreateLinklistHead()
{
int x, i, nodeNum;
linklist *head, *temp; // 头结点与临时结点
head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点
head-next = NULL; // 给表头结点的指针域赋值
printf("请输入链表中结点的个数:");
scanf("%d", nodeNum);
for(i=1; i=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点
temp-data = x; // 对新结点的数据域赋值
// 将新结点插到头结点之后
temp-next = head-next;
head-next = temp;
}
return head; // 返回新建链表的头结点
}
#else
/*********************************************************************
* 函数名称:linklist *CreateLinklistRear()
* 函数功能:利用尾插法创建链表
* 参 数:无
* 返 回 值:创建完链表后的链表头结点
* 说 明:无
*********************************************************************/
extern linklist *CreateLinklistRear()
{
int x, i, nodeNum;
linklist *head, *rear, *temp; // 定义头结点、尾结点和临时结点
head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点,表头结点不存放数据
head-next = NULL; // 将表头结点的指针域赋值为NULL
rear = head; // 将表头结点赋值给表尾结点
printf("请输入链表中结点的个数:");
scanf("%d", nodeNum);
for(i=1; i=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点
temp-data = x; // 新增结点的数据域
temp-next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)
rear-next = temp; // 使前一个结点指向新增结点(head-next=temp)
rear = temp; // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head-next)
}
//rear-next = NULL; // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)
return head; // 返回头结点
}
#endif