数据结构单链表的建立

1.有序单链表的操作集合有如下操作:初始化、插入、删除、撤销,使用头文件单链表的代码。

2.编写主函数main()验证所设计的有序单链表是否能正确插入、删除。


头文件
typedef struct SingleNode
{
    ElemType data;
    struct SingleNode *next;
}SingleLinkedList;
 
void ListInitiate(SingleLinkedList **head)
{
    if((*head = (SingleLinkedList*)malloc(sizeof(SingleLinkedList)))==NULL)
        exit(1);
        (*head)->next = NULL;
}
 
void ListInsert(SingleLinkedList *head,ElemType x)
{
    SingleLinkedList *p, *q,*h;
    p = head->next;
    q = head;
    while(p!=NULL&&p->data <=x)
    {
        q = p;
        p = p->next;
    }
    h = (SingleLinkedList*)malloc(sizeof(SingleLinkedList));
    h-> data = x;
    h->next = q->next;
    q->next = h; 
}
 
int ListDelete(SingleLinkedList *head,ElemType x)
{
    SingleLinkedList *p, *q;
    p = head;
    while(p->next!= NULL)
    {
        if(p->next->data == x)
        {
        break;
        }
        p=p->next;
        
    }
    if(p->next == NULL)
        return 0;
    else
    {
        q=p->next;
        p->next = p->next->next;
        free(q);
        return 1;
    }
 
        
}
 
void Destroy(SingleLinkedList **head)
{
    SingleLinkedList *p, *q;
    p = *head;
    while(p != NULL)
    {
        q = p;
        p = p->next;
        free(q);
    }
    *head = NULL;
}
 
int listlength(SingleLinkedList *head)
{
    SingleLinkedList *p=head;
    int size = 0;
    while(p->next!=NULL)
    {
        p=p->next;
        size++;
        
    }
    return size;
}
 
 
源文件
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
#include"LinkedList.h"
 
int main(void)
{
    SingleLinkedList *head,*p;
    ListInitiate(&head);
    int x,n,i,s,t,m;
    printf("请选择输入多少个数字:");
    scanf("%d",&n);
    for(i = 0;i < n;i++)
    {
        printf("第%d个数字是:",i+1);
        scanf("%d",&x);
        ListInsert(head,x);
                 
    }
    p=head;
    for(i = 0;i < n;i++)
    {
        printf("%5d",p->next->data);
        p=p->next;
    }
    
    printf("\n输入你要删除的数字:");
    scanf("%d",&s);
    
    m=ListDelete(head,s);
    if(m=0)
    printf("删除失败");
    
    p=head;
    t=listlength(head);
 
    for(i = 0;i < t;i++)
    {
        
        printf("%5d",p->next->data);
        p=p->next;
    }
    return 0;
}

https://blog.csdn.net/qq_66451743/article/details/125025020