當前位置:
首頁 > 最新 > 如何快速編寫增刪改程序?C/C 鏈表操作,基礎數據結構的使用

如何快速編寫增刪改程序?C/C 鏈表操作,基礎數據結構的使用

源碼:

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

struct student

{

char name[20];

int age;

int num;

};

//單鏈表的結構體

typedef struct SingleList

{

struct student mystudent;

//指針域

struct SingleList *next;

}LIST, *LPLIST;

/*

別名:習慣大寫

起別名---小名

//好處:單詞少,好看(含義更精簡)

struct SingleList 換一種叫法: LIST;

strcut SingleList * 換一種叫法: LPLIST

*/

//------->2.創建鏈表 ---任何結構都需要用一個東西去表示

LPLIST CreateList()

{

//創建過程就是初始化過程---初始化基本數據成員過程

//需要內存空間

LPLIST List = (LPLIST)malloc(sizeof(LIST));

if (List == nullptr)

{

printf("失敗了");

system("pause");

exit(0);

}

//初始化基本數據成員----有表頭的鏈表

List->next = nullptr;

return List;

}

//------->3.創建結點

LPLIST CreateNode(struct student mystudent)

{

//1.需要內存

LPLIST Node = (LPLIST)malloc(sizeof(LIST));

//2.初始化基本數據成員

strcpy(Node->mystudent.name, mystudent.name);

Node->mystudent.age = mystudent.age;

Node->mystudent.num = mystudent.num;

Node->next = nullptr;

return Node;

}

//------->4.2 尾插法

void InsertListTailNode(LPLIST List, struct student mystudent)

{

//找到表尾--->定義一個移動的指針

LPLIST tailNode = List;

while (tailNode->next != nullptr)

{

tailNode = tailNode->next;

}

//創建插入的結點

LPLIST newNode = CreateNode(mystudent);

tailNode->next = newNode;

}

//------->5.判斷是否為空

//和創建的時候比較

int IsEmptyList(LPLIST List)

{

if (List->next == nullptr)

return 1; //返回1表示為空

return 0; //表示不為空

}

////------->6.列印數據

void PrintList(LPLIST List)

{

if (IsEmptyList(List))

{

printf("鏈表為空,無法列印");

system("pause");

exit(0);

}

LPLIST pNext = List->next;

while (pNext != nullptr)

{

printf("姓名:%s年齡:%d編號:%d", pNext->mystudent.name, pNext->mystudent.age, pNext->mystudent.num);

pNext = pNext->next;

}

}

//------->9.按照編號指定位置刪除

void DeleteListAppoinNode_num(LPLIST List, int num)

{

//創建兩個移動的指針:去找指定位置和指定位置的前面

LPLIST frontNode = List;

//frontNode->next==taiNode:判斷相鄰

LPLIST tailNode = List->next;

//判斷是否為空

while (tailNode->mystudent.num != num)

{

/*

frontNode=frontNode->next;

tailNode=tailNode->next;

*/

frontNode = tailNode;

tailNode = frontNode->next;

if (tailNode == nullptr)

{

printf("未找到指定位置");

system("pause");

exit(0);

}

}

frontNode->next = tailNode->next;

free(tailNode);

}

//------->9.按照姓名指定位置刪除

void DeleteListAppoinNode_name(LPLIST List, char *name)

{

//創建兩個移動的指針:去找指定位置和指定位置的前面

LPLIST frontNode = List;

//frontNode->next==taiNode:判斷相鄰

LPLIST tailNode = List->next;

//判斷是否為空

while (strcmp(tailNode->mystudent.name, name))

{

/*

frontNode=frontNode->next;

tailNode=tailNode->next;

*/

frontNode = tailNode;

tailNode = frontNode->next;

if (tailNode == nullptr)

{

printf("未找到指定位置");

system("pause");

exit(0);

}

}

frontNode->next = tailNode->next;

free(tailNode);

}

void Menu()

{

printf("1.錄入信息");

printf("2.刪除信息");

printf("3.瀏覽信息");

}

LPLIST List = CreateList(); //List創建成功

void key_down()

{

char name[20] = "";

int num = 0;

fflush(stdin);

char choice = getchar();

int DChoice = 1;

switch (choice)

{

case 1 :

system("cls");

struct student mystudent;

printf("請輸入:姓名:年齡:編號:");

scanf("%s%d%d", mystudent.name, &mystudent.age, &mystudent.num);

InsertListTailNode(List, mystudent);

break;

case 2 :

system("cls");

fflush(stdin);

printf("1.按照姓名刪除");

printf("2.按照編號");

DChoice = getchar();

switch (DChoice)

{

case 1 :

printf("請輸入要刪除的姓名:");

scanf("%s", name);

DeleteListAppoinNode_name(List, name);

break;

case 2 :

printf("請輸入要刪除的編號:");

scanf("%s", name);

DeleteListAppoinNode_num(List, num);

}

break;

case 3 :

system("cls");

printf("學生信息:");

PrintList(List);

break;

default:

printf("輸入錯誤");

system("pause");

}

}


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 maye 的精彩文章:

學了這麼久,這些選擇題你會嗎?
C 標準輸入輸出流的控制符
《實用C》第4課:玩轉 Hello World!
程序員的突發奇想,老闆竟把他炒了,原因是思想太超前

TAG:maye |