#include<stdio.h>
#include<math.h>
int isprime(int n)
{
int i,t
if(n==2)
return 1
if(n%2==0 || n<2)
return 0
for(i=3,t=(int)sqrt(n)i<=ti+=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(++i<3)
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++
}
#include<stdio.h>#include<malloc.h>
typedef struct st
{
int num
struct st *next
}ST
void stPrintf(ST *stHead)
ST *insertST(ST **stHead,ST *stTail)//向链表插入节点,返回尾节点
ST *findByOrd(ST *stHead,int n)//通过节点顺序编号(从1开始)查找节点,返回该节点的前一个节点
ST *deleteST(ST *stHead,ST *stTail)//删除节点
int main()
{
ST *stHead=NULL,*stTail=NULL
stTail=insertST(&stHead,stTail)//插入,想插入几个节点,就调用几次
stTail=insertST(&stHead,stTail)
stTail=insertST(&stHead,stTail)
stPrintf(stHead)
deleteST(stHead,stTail)// 删除,想删几次调用几次
stPrintf(stHead)
deleteST(stHead,stTail)
stPrintf(stHead)
return 0
}
void stPrintf(ST *stHead)
{
printf("当前链表各节点的数值是:")
while(stHead->next!=NULL)
{
printf("%d ",stHead->next->num)
stHead=stHead->next
}
printf("\n")
}
ST *insertST(ST **stHead,ST *stTail)
{
int num
ST *stNew=NULL
stNew=(ST *)malloc(sizeof(ST))
printf("给新节点输入一个数字:")
scanf("%d",&num)
stNew->num=num
stNew->next=NULL
if(*stHead==NULL)
{
*stHead=(ST *)malloc(sizeof(ST))
(*stHead)->next=stNew
printf("创建首节点\n")
}
else
{
stTail->next=stNew
printf("创建新节点\n")
}
stTail=stNew
return stTail
}
ST *findByOrd(ST *stHead,int n)
{
int cnt=0
while(stHead->next!=NULL)
{
cnt++
if(cnt==n)
return stHead
stHead=stHead->next
}
printf("未找到对应节点\n")
return NULL
}
ST *deleteST(ST *stHead,ST *stTail)
{
int n
ST *stFind=NULL,*stNext=NULL
printf("请输入要删除第几个节点:")
scanf("%d",&n)
stFind=findByOrd(stHead,n)
if(stFind!=NULL)
{
if(stTail==stFind->next)
stTail=stFind
stNext=stFind->next->next
free(stFind->next)
stFind->next=stNext
printf("节点删除成功!\n")
}
else
printf("节点删除失败!\n")
return stTail
}
/* 线性表-链表的操作: 只提供核心语句 */#include "stdio.h"
#include "stdlib.h"
#define N 100
typedef int ElemType/* 链表的存储结构 */
typedef struct LNode{
ElemType data
struct LNode *next} LNode,*LinkList/* 链表的基本操作 *//******* 1.初始化链表 ******/
void InitList(LinkList *L)
{ *L=(LinkList)malloc(sizeof(LNode))
(*L)->next=NULL}/******* 2.销毁链表 ******/
void DestroyList(LinkList *L)
{ LinkList p
while(*L!=NULL)
{ p=*L
*L=(*L)->next
free(p)}
}
/******* 10.在顺序表第n个位置插入元素e ******/
void ListInsert(LinkList *L, int n, ElemType e)
{ LinkList p,q,newint i
q=*Lp=(*L)->nexti=1
while (p!=NULL &&i<n) { q=pp=p->nexti++}
new=(LinkList)malloc(sizeof(LNode))
new->data=e
q->next=newnew->next=p}/******* 11.删除链表中第n个位置的元素 ******/
void ListDelete(LinkList *L, int n, ElemType *e)
{ LinkList p,qint i
q=*Lp=(*L)->nexti=1
while (p!=NULL &&i<n) { q=pp=p->nexti++}
*e=p->data
q->next=p->nextfree(p)}/******* 12.遍历链表并输出 ******/
void ListTraverse(LinkList L)
{ LinkList p
printf("\nList:\t")
p=L->next
while (p!=NULL)
{ printf("%d\t",p->data)
p=p->next}
}/******* A(2).后接法建立顺序链表 ******/
void CreateList2(LinkList *L, ElemType a[], int n)
{ LinkList p,newint i
p=*L
for(i=0i<ni++)
{ new=(LinkList)malloc(sizeof(LNode))
new->data=a[i]
p->next=newp=p->next}
p->next=NULL
}
/* 主函数 */
main()
{ LinkList LaElemType a[]={1,3,5,7,9},x
InitList(&La)//初始化链表
CreateList2(&La,a,5)//建立链表并用数组赋值
ListTraverse(La)//遍历链表
ListInsert(&La, 3, 100)//第三个位置插入100
ListTraverse(La)//遍历链表
ListDelete(&La,5,&x)//删除第五个元素,用x返回
ListTraverse(La)//遍历链表 DestroyList(&La)//销毁链表
} 这是我们刚学的,保证简洁准确