数据结构C语言单链表的创建,插入删除和合并程序代码

Python012

数据结构C语言单链表的创建,插入删除和合并程序代码,第1张

你看这个应该满足要求吧。我把三种循环方式都用上了:

#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)//销毁链表

} 这是我们刚学的,保证简洁准确