2020-04-03作業


#include <stdio.h>
#include "string.h"
#include "ctype.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"

#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OK 1

#define MAXSIZE 20 /* 存儲空間初始分配量 */

typedef int Status;/* Status是函數的類型,其值是函數結果狀態代碼,如OK等 */
typedef int ElemType;/* ElemType類型根據實際情況而定,這里假設為int */

//定義結點
typedef struct Node{
    ElemType data;
    struct Node *next;
}Node;

typedef struct Node * LinkList;



//2.1 初始化單鏈表線性表
Status InitList(LinkList *L){
    
    //產生頭結點,并使用L指向此頭結點
    *L = (LinkList)malloc(sizeof(Node));
    //存儲空間分配失敗
    if(*L == NULL) return ERROR;
    //將頭結點的指針域置空
    (*L)->next = NULL;

    
    return OK;
}


//2.2 單鏈表插入
/*
 初始條件:順序線性表L已存在,1≤i≤ListLength(L);
 操作結果:在L中第i個位置之后插入新的數據元素e,L的長度加1;
 */
Status ListInsert(LinkList *L,int i,ElemType e){
 
    int j;
    LinkList p,s;
    p = *L;
    j = 1;
    
    //尋找第i-1個結點
    while (p && j<i) {
        p = p->next;
        ++j;
    }
    
    //第i個元素不存在
    if(!p || j>i) return ERROR;
    
    //生成新結點s
    s = (LinkList)malloc(sizeof(Node));
    //將e賦值給s的數值域
    s->data = e;
    //將p的后繼結點賦值給s的后繼
    s->next = p->next;
    //將s賦值給p的后繼
    p->next = s;
    
    return OK;
}


//2.3 單鏈表取值
/*
 初始條件: 順序線性表L已存在,1≤i≤ListLength(L);
 操作結果:用e返回L中第i個數據元素的值
 */
Status GetElem(LinkList L,int i,ElemType *e){
    
    //j: 計數.
    int j;
    //聲明結點p;
    LinkList p;
    
    //將結點p 指向鏈表L的第一個結點;
    p = L->next;
    //j計算=1;
    j = 1;
    
    
    //p不為空,且計算j不等于i,則循環繼續
    while (p && j<i) {
        
        //p指向下一個結點
        p = p->next;
        ++j;
    }
    
    //如果p為空或者j>i,則返回error
    if(!p || j > i) return ERROR;
    
    //e = p所指的結點的data
    *e = p->data;
    return OK;
    
    
}

//2.4 單鏈表刪除元素
/*
 初始條件:順序線性表L已存在,1≤i≤ListLength(L)
 操作結果:刪除L的第i個數據元素,并用e返回其值,L的長度減1
 */

Status ListDelete(LinkList *L,int i,ElemType *e){
    
    int j;
    LinkList p,q;
    p = (*L)->next;
    j = 1;
    
    //查找第i-1個結點,p指向該結點
    while (p->next && j<(i-1)) {
        p = p->next;
        ++j;
    }
    
    //當i>n 或者 i<1 時,刪除位置不合理
    if (!(p->next) || (j>i-1)) return  ERROR;
    
    //q指向要刪除的結點
    q = p->next;
    //將q的后繼賦值給p的后繼
    p->next = q->next;
    //將q結點中的數據給e
    *e = q->data;
    //讓系統回收此結點,釋放內存;
    free(q);
    
    return OK;
}

/* 初始條件:順序線性表L已存在 */
/* 操作結果:依次對L的每個數據元素輸出 */
Status ListTraverse(LinkList L)
{
    LinkList p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return OK;
}

/* 初始條件:順序線性表L已存在。操作結果:將L重置為空表 */
Status ClearList(LinkList *L)
{
    LinkList p,q;
    p=(*L)->next;           /*  p指向第一個結點 */
    while(p)                /*  沒到表尾 */
    {
        q=p->next;
        free(p);
        p=q;
    }
    (*L)->next=NULL;        /* 頭結點指針域為空 */
    return OK;
}

//3.1 單鏈表前插入法
/* 隨機產生n個元素值,建立帶表頭結點的單鏈線性表L(前插法)*/
void CreateListHead(LinkList *L, int n){
    
    LinkList p;
    
    //建立1個帶頭結點的單鏈表
    *L = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;
    
    //循環前插入隨機數據
    for(int i = 0; i < n;i++)
    {
        //生成新結點
        p = (LinkList)malloc(sizeof(Node));
       
        //i賦值給新結點的data
        p->data = i;
        //p->next = 頭結點的L->next
        p->next = (*L)->next;
        
        //將結點P插入到頭結點之后;
        (*L)->next = p;
        
    }
}

//3.2 單鏈表后插入法
/* 隨機產生n個元素值,建立帶表頭結點的單鏈線性表L(后插法)*/
void CreateListTail(LinkList *L, int n,int data){
    
    LinkList p,r;
 
    //建立1個帶頭結點的單鏈表
    *L = (LinkList)malloc(sizeof(Node));
    //r指向尾部的結點
    r = *L;
    
    for (int i=0; i<n; i++) {
        
        //生成新結點
        p = (Node *)malloc(sizeof(Node));
        p->data = i+data;
        
        //將表尾終端結點的指針指向新結點
        r->next = p;
        //將當前的新結點定義為表尾終端結點
        r = p;
    }
    
    //將尾指針的next = null
    r->next = NULL;
    
}

//合并鏈表
Status MaxList(LinkList *L,LinkList *N){
    
    LinkList a,b;
    a = (*L)->next;
    b = *N;
    if (a == NULL || b == NULL) {
        return ERROR;
    }
    while (a&&a->next != NULL) {
        a= a->next;
    }
    a->next = b->next;
    free(b);
    return OK;
}

//相同合并
LinkList SameMaxList(LinkList L,LinkList N){
    
    LinkList ans;
    InitList(&ans);
    
    LinkList a,b,s,r;
    r = ans;
    a = (L)->next;
    b = (N)->next;
    if (a == NULL || b == NULL) {
        return ERROR;
    }
    
    for (;a;a = a->next) {
        int tmpdata = a->data;
        for (LinkList tmp = b;tmp;tmp = tmp->next) {
//            printf("%d ",tmp->data);
            if (tmpdata == (int)tmp->data) {
                s = (LinkList)malloc(sizeof(Node));
                s->data = tmpdata;
                s->next = NULL;
                r->next = s;
                r = s;
                break;
            }
        }
    }
    
    
    
    return ans;
}

Status exchangeList(LinkList *L){
    
    LinkList m,n;
    n = (*L)->next;
    (*L)->next = NULL;
    while (n) {
        m = n->next;
        n->next = (*L)->next;
        (*L)->next = n;
        n = m;
    }
    
    return OK;
}

Status DelTargetList(LinkList*L,int mink,int maxk){
    
    LinkList q,p;
    q = (*L);
    while (q&&q->next != NULL) {
        int tmp = q->next->data;
        if (maxk>=tmp&&tmp>=mink) {
            p = q->next;
            q->next = q->next->next;
            free(p);
        }else{
            q = q->next;
        }
    }
    return OK;
}


int main(int argc, const char * argv[]) {
    Status iStatus;
    LinkList L1,L2,L3;
//    struct Node *L2;
    
    //第一題
//    CreateListTail(&L1, 5,1);
//    printf("整理創建L的元素(后插法):\n");
//    ListTraverse(L1);
//    CreateListTail(&L2, 5,100);
//    printf("整理創建L的元素(后插法):\n");
//    ListTraverse(L2);
//    MaxList(&L1, &L2);
//    printf("合并表格:\n");
//    ListTraverse(L1);
    
    //第二題
//    CreateListTail(&L1,5,1);
//    ListTraverse(L1);
//    CreateListTail(&L2, 5,3);
//    ListTraverse(L2);
//    L3 = SameMaxList(L1, L2);
//    printf("合并表格:\n");
//    ListTraverse(L3);
    
    //第三題
//    CreateListTail(&L1,5,1);
//    ListTraverse(L1);
//    exchangeList(&L1);
//    printf("順序調轉:\n");
//    ListTraverse(L1);
    
    //第四題
    CreateListTail(&L1,5,1);
    ListTraverse(L1);
    DelTargetList(&L1, 3, 5);
    printf("刪除后:\n");
    ListTraverse(L1);
    
    
    
}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 怎么感覺作業越來越難了呢? 犯愁了一上午,音頻聽了兩三遍,也沒找到個突破點,我的兒子哪方面能出色?自認為挺了解自己...
    琳瑯_e3e2閱讀 70評論 0 1
  • 剛統計作業 順便看了一下大家都作業,每個人看書都有不同的感受,創新在于人而不是產品 這本書 讀了幾頁 不感興趣,硬...
    若溪_閱讀 57評論 0 0
  • 線上改作業 1 晚飯后的作業 吃過晚飯,已近晚七點。片刻休憩后,照例我們全家開...
    三元日記閱讀 395評論 0 0
  • 【長篇原創】圖文:風聽雨夜寐荷 如果不曾開啟心門 還是彭少峰上前來,搖了一下她的肩膀,還沒等開口說話,笑兒就像從夢...
    風聽雨夜寐荷閱讀 451評論 0 3
  • 繼續臨摹一張 彩鉛很需要一筆一劃的耐心
    大雲DAYUN閱讀 218評論 0 2