久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2568|回復(fù): 0
收起左側(cè)

單鏈表的運(yùn)用C語(yǔ)言程序

[復(fù)制鏈接]
ID:126856 發(fā)表于 2016-6-15 15:25 | 顯示全部樓層 |閱讀模式
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int temptag = 0;
typedef int ElemType;
typedef struct LNode        //定義單鏈表結(jié)點(diǎn)類(lèi)型
{
        ElemType data;
    struct LNode *next;
} LinkList;

void InitList(LinkList *&L) //初始化鏈表,若要重新輸入數(shù)據(jù),就應(yīng)該先初始化鏈表
{
        L=(LinkList *)malloc(sizeof(LinkList));          //創(chuàng)建頭結(jié)點(diǎn)
        L->next=NULL;
        printf("初始化鏈表成功!\n");
}

void DestroyList(LinkList *&L) //銷(xiāo)毀鏈表,也就是釋放內(nèi)存
{
        LinkList *p=L,*q=p->next;
        while (q!=NULL)
        {
                free(p);
                p=q;
                q=p->next;
        }
        free(p);
}


int ListLength(LinkList *L) //輸出鏈表的長(zhǎng)度
{
        LinkList *p=L;int i=0;
        while (p->next!=NULL)
        {
                i++;
p=p->next;
        }
        return(i);
}

void DispList(LinkList *L) //顯示鏈表的數(shù)據(jù)
{
    printf("鏈表中的數(shù)據(jù)如下:\n");
        LinkList *p=L->next;
        while (p!=NULL)
        {
                printf("%d ",p->data);
                p=p->next;
        }
        printf("\n");
}

int GetElem(LinkList *L,int i,ElemType &e) //獲取鏈表中的任意位置的元素。但是不能越界
{
        int j=1;
        LinkList *p=L->next;
        while (j<i && p!=NULL)
        {
                j++;
                p=p->next;
        }
        if (p==NULL)
                return 0;
        else
        {
                e=p->data;
                return 1;
        }
}


int ListInsert(LinkList *&L,int i,ElemType e) //插入新的節(jié)點(diǎn)
{
        int j=0;
        LinkList *p=L,*s;
        while (j<i-1 && p!=NULL)
        {
                j++;
                p=p->next;
        }
        if (p==NULL)        //未找到第i-1個(gè)結(jié)點(diǎn)
        {
        printf("未找到第%d個(gè)節(jié)點(diǎn)!\n", (i-1));
                return 0;
    }
        else                        //找到第i-1個(gè)結(jié)點(diǎn)*p
        {
                s=(LinkList *)malloc(sizeof(LinkList));        //創(chuàng)建新結(jié)點(diǎn)*s
                s->data=e;                                                               
                s->next=p->next;                                                //將*s插入到*p之后
                p->next=s;
                return 1;
        }
}

int ListDelete(LinkList *&L,int i) //刪除相應(yīng)位置的節(jié)點(diǎn)
{
        int j=0;
        LinkList *p=L,*q;
        while (j<i-1 && p!=NULL)
        {
                j++;
                p=p->next;
        }
        if (p==NULL)                                //未找到第i-1個(gè)結(jié)點(diǎn)
                return 0;
        else                                                //找到第i-1個(gè)結(jié)點(diǎn)*p
        {
                q=p->next;                                //q指向要?jiǎng)h除的結(jié)點(diǎn)
if (q==NULL) return 0;
                //e=q->data;
                p->next=q->next;                //從單鏈表中刪除*q結(jié)點(diǎn)
                free(q);                                //釋放*q結(jié)點(diǎn)
                return 1;
        }
}
void Delete2(LinkList *&L)//刪除表中所有值相同的多余元素(使得操作后的線(xiàn)性表中所有元素的值均不相同),
{
LinkList *p,*q,*s;
p=L;
q=L->next;
while(q->next)
{
  if(q->data==q->next->data)
  {
   p->next=q->next;
   s=q;
   q=q->next;
   free(s);
  }
  else
  {
   p=p->next;
   q=q->next;
  }
}
printf("刪除成功!!!!\n");
}

void jiangxu(LinkList *&L) //降序排列鏈表中的元素
{
    int temp1, temp2;
    LinkList *q, *temp;
    q = L->next;
    while(q != NULL)
    {
        temp = q->next;
        while(temp != NULL)
        {
            temp1 = q->data;
            temp2 = temp->data;
            if(temp1 < temp2)
            {
                q->data = temp2;
                temp->data = temp1;
            }
            temp = temp->next;
        }
        q = q->next;
    }        
}

void nizhi(LinkList *&L) //將鏈表中的元素順序逆置
{
    LinkList *New, *p, *q;
    p = L->next;
    New = (LinkList *)malloc(sizeof(LinkList));
    New->next = NULL;
while(p != NULL)
    {
        LinkList *s=(LinkList *)malloc(sizeof(LinkList));
        s->data = p->data;
        p = p->next;
        s->next = New->next;
        New->next = s;
    }
    L = New;
}

void MaxAndMin(LinkList *&L) //求最大值和最小值
{
    LinkList  *temp;
    int Max, Min;
    temp = L->next;
    Max = -100;
    Min = 100;

    while(temp != NULL)
    {
        if(temp->data <= Min)
        {
            Min = temp->data;
        }
        if(temp->data >= Max)
        {
            Max = temp->data;
        }
        temp = temp->next;
    }
    printf("最大值是:%d\n最小值是:%d\n", Max, Min);
}

void Add(LinkList *&L)   //添加一個(gè)新的鏈表,并與之前的鏈表合并,降序輸出
{
LinkList *List2, *p;
    InitList(List2);
    int data, tag = 1;
    printf("請(qǐng)輸入第二個(gè)鏈表的數(shù)據(jù):\n");
    scanf("%d", &data);
    while(data != -1)
    {
        ListInsert(List2, tag, data);
        tag++;
        scanf("%d", &data);
    }
    printf("第一個(gè)鏈表:\n");
    DispList(L);
    printf("第二個(gè)鏈表:\n");
    DispList(List2);
    p = List2->next;
    while(p != NULL)
    {
        LinkList *s=(LinkList *)malloc(sizeof(LinkList));
        s->data = p->data;
        p = p->next;
        s->next = L->next;
        L->next = s;
    }
    jiangxu(L);
Delete2(L);
    printf("合并后的鏈表:\n");
    DispList(L);
}





int main()
{
        LinkList *h;
        ElemType e;
        int temp = 1,  data;
        while(temp != 0)
        {


        printf(" (1 )輸入 1,初始化單鏈表h\n");
            printf(" (2 )輸入 2,采用尾插法插入元素, -1表示輸入結(jié)束\n");
        printf(" (3 )輸入 3,輸出單鏈表h:\n");
        printf(" (4 )輸入 4,輸出單鏈表h長(zhǎng)度\n");
        printf(" (5 )輸入 5,然后輸入N,查找單鏈表的第N個(gè)元素\n");
        printf(" (6 )輸入 6,在第M個(gè)元素位置上插入元素NUM\n");
            printf(" (7 )輸入 7,然后輸入K,刪除鏈表的第K個(gè)元素\n");
            printf(" (8)輸入  8,將鏈表元素降序排列\(zhòng)n");
            printf(" (9)輸入  9,輸出最大值和最小值\n");
            printf(" (10)輸入 10,將該鏈表逆置\n");
            printf(" (11)輸入 11,創(chuàng)建第二個(gè)鏈表,并合并之前鏈表,降序輸出\n");
            


        scanf("%d", &temp);
            if(temp == 1)
               InitList(h);
            else if(temp == 2)
            {
                        printf("請(qǐng)輸入數(shù)據(jù):");
            int tag = 1;
            scanf("%d", &data);
            while(data != -1)
            {
                   ListInsert(h, tag, data);
  tag++;
                   scanf("%d", &data);
            }
            printf("數(shù)據(jù)插入成功!\n");
        }
        else if(temp == 3)
               DispList(h);
            else if(temp == 4)
               printf("該單鏈表的長(zhǎng)度 = %d\n",ListLength(h));
            else if(temp == 5)
        {
           int N;
                           printf("請(qǐng)輸入數(shù)據(jù)N:");
           scanf("%d", &N);
           if(N<1||N>ListLength(h))
                printf("你輸入的數(shù)據(jù)不合法!\n");
           else
           {
                   GetElem(h,N,e);
                   printf("第%d個(gè)元素是%d\n", N, e);
            }
        }
        else if(temp == 6)
        {
            int M, num;
            printf("請(qǐng)輸入M值和NUM值:\n");
            scanf("%d%d", &M, &num);
            if(M<=0||M>ListLength(h)+1)
                printf("你輸入的數(shù)據(jù)不合法!\n");
            else
                ListInsert(h, M, num);
        }
        else if(temp == 7)
        {
            int K;
                         printf("請(qǐng)輸入數(shù)據(jù)k:");
            scanf("%d", &K);
                        if(K<=0||K>ListLength(h))
                        printf("無(wú)效輸入請(qǐng)重新選擇刪除 \n");
                         else       
                                 ListDelete(h,K);
               
                       
}
            else if(temp == 8)
        {
                         printf("降序成功");
            jiangxu(h);
        }
        else if(temp == 9)
        {

            MaxAndMin(h);
        }
        else if(temp == 10)
        { printf("逆置成功");
            nizhi(h);
        }
        else if(temp == 11)
        {
            Add(h);
        }



    }
    system("pause");
    return 0;
}


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩一级黄色片 | 动漫www.被爆羞羞av44 | 性色的免费视频 | 久久久妇女国产精品影视 | 欧美高清视频一区 | 天天爱av | 91国语清晰打电话对白 | 五月花丁香婷婷 | 成人国产在线观看 | 成人三区四区 | 成人性生交大片免费看r链接 | 日日摸夜夜爽人人添av | wwwww在线观看| 国产一区二区三区免费观看在线 | 亚洲 欧美 在线 一区 | 香蕉久久网 | 国产精品乱码一二三区的特点 | 丁香五月网久久综合 | 欧美精品一二三区 | 亚洲一区在线播放 | 日韩欧美一区二区三区四区 | 国产一区二区三区不卡av | 国产区一区二区三区 | 懂色一区二区三区免费观看 | 国产精品综合色区在线观看 | 亚洲黄色一级 | 91佛爷在线观看 | 成人亚洲精品 | 午夜视频在线免费观看 | 国产高清视频 | 精品无码久久久久久国产 | 亚洲网站在线播放 | 国产激情一区二区三区 | 综合久久综合久久 | 日本中文在线视频 | 亚洲一页 | 日本在线视频一区二区 | 久久精品国产一区二区三区 | 久久久久国产一区二区三区四区 | 久久极品| 日韩综合在线 |