有很多大一的小白兔,學習C語言,在期末會有大作業
類似學生管理系統,酒店管理系統,電話簿管理系統
這種xxx管理系統大都是要求使用結構體和鏈表
本著授之以漁不如授之以漁的思想
我現在給出結構體和鏈表的框架
以供大家學習(期末壓力大,希望我的框架讓你們更快更好的完成大作業)
話不多說,直接上框架
本人也是初學者,能力有限,若有bug請直接指出,
歡迎各位初學者加群:1025729828,@計科小學生
一起學習
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct A { // 結構體A
char c[10];//資料
};
struct B { //結構體B
int number;//鏈表節點號
struct A a; //包含結構體A
struct B* next;//形成鏈表
};
//鏈表頭尾指標
struct B* R_head = NULL;
struct B* R_end = NULL;
void deleteListHead()//洗掉鏈表頭節點
{
if (R_head == NULL)//鏈表為空
{
return;
}
//記住舊的頭
struct B* d = R_head;
//頭的下一個,變成新的頭
R_head = R_head->next;
//釋放舊的頭
free(d);
}
void deleteListTail()
//洗掉鏈表尾節點
{
struct B* p = R_head;
if (R_head == NULL)//空鏈
{
return;
}
else if (R_head == R_end)//只有一個資料的鏈
{
free(R_head);
R_head = NULL;
R_end = NULL;
}
else
{
while (p->next != R_end)
{
p = p->next;
}
}
//找到了,刪尾巴
free(R_end);
R_end = p;
R_end->next = NULL;
}
void DeleteList()//洗掉鏈表節點
{
int a;// a是節點號
printf("輸入節點號:\n");
scanf("%d",&a);
struct B* ptemp = R_head;
while (ptemp != NULL)
{
if (ptemp->number ==a)//找到節點號
{
if (R_head == R_end)
{
deleteListHead();
printf("洗掉成功\n");
return;
}
//有兩個節點
else if (R_head->next == R_end)
{
if (ptemp->number == a)
{
deleteListHead();
printf("洗掉成功\n");
return;
}
else
{
deleteListTail();
printf("洗掉成功\n");
return;
}
}
else if (R_head->next != R_end)//多個節點
{
struct B* d = R_head;
while (d->number != a)//找節點
{
d = d->next;
}
//找到后
struct B* del = R_head;//再找節點的前一個
while (del->next != d)
{
del = del->next;
}
del->next = d->next;//關鍵操作
free(d);
printf("洗掉成功\n");
return;
}
}
ptemp = ptemp->next;
}
}
void addLIST(int number,struct A *dic)//按照number(節點號)排序插入鏈表
{
struct B* ptemp = R_head;
struct B* pt = R_head;
/*尾添加,無需排序
struct B* NewRoom = (struct B*)malloc(sizeof(struct B));
NewRoom->number = number;
//連接
if (R_head == NULL || R_end == NULL) //尾插法
{
//鏈表為空時
R_head = NewRoom;
R_end = NewRoom;
}
else
{
//鏈表不為空
R_end->next = NewRoom;
R_end = NewRoom;
R_end=NULL;
}
*/
//按節點號插
if (R_head == NULL || R_end == NULL)//空鏈
{
printf("空鏈插 \n");
struct B* NewRoom = (struct B*)malloc(sizeof(struct B));
NewRoom->number = number;
NewRoom->a = *dic;
NewRoom->next = NULL;
R_head = NewRoom;
R_end = NewRoom;
}
else if (R_end->number < number)//尾插
{
printf("尾插 \n");
struct B* NewRoom = (struct B*)malloc(sizeof(struct B));
NewRoom->number = number;
NewRoom->a = *dic;
R_end->next = NewRoom;
R_end = NewRoom;
R_end->next = NULL;
}
else if (R_head->number > number)//頭插
{
printf("頭插\n");
struct B* NewRoom = (struct B*)malloc(sizeof(struct B));
NewRoom->number = number;
NewRoom->a = *dic;
NewRoom->next = R_head;
R_head = NewRoom;
}
else//中間插
{
printf("中間插\n");
while (ptemp->number < number)
{
pt = ptemp;
ptemp = ptemp->next;
}
struct B* NewRoom = (struct B*)malloc(sizeof(struct B));
NewRoom->number = number;
NewRoom->a = *dic;
NewRoom->next = ptemp;
pt->next = NewRoom;
}
}
void FreeList()
//釋放鏈表
{
printf("謝謝使用按任意鍵關閉程式!!\n");
struct B* ptemp = R_head;
while (ptemp != NULL)
{
struct B* pt = ptemp;
ptemp = ptemp->next;
free(pt);
}
R_head = NULL;
R_end = NULL;
}
void printlist()//列印所有資訊
{
struct B* ptemp = R_head;
int j, sum = 0;
while (ptemp != NULL)
{
if (ptemp->number)
{
printf("\t節點號int--%d\n", ptemp->number);
printf("\t節點char--%s\n", ptemp->a.c);
}
printf("\n");
ptemp = ptemp->next;
}
printf("\t要回傳首頁嗎?(1:Y,0:N)");
scanf("%d", &j);
if (j == 0)
{
printlist();
}
system("cls");
}
void Login() //登記,注冊函式
{
struct A* info = (struct A*)malloc(sizeof(struct A));
int i, j;
system("cls");
printf("寫入新的char\n");
scanf("%s", &info->c);
printf("請輸入int:\n");
scanf("%d", &i);
addLIST(i,info);
printf("恭喜,寫入成功!!\n要回傳首頁嗎?(1:Y,0:N)");
scanf("%d", &j);
if (j == 0)
{
Login();
}
system("cls");
}
void show() {
printf(" | 1.--寫入 |\n");
printf(" | 2.--洗掉 |\n");
printf(" | 3.--排序輸出 |\n");
printf(" | 4.--退出 |\n");
}
int main()
{
int i;
do //選單欄
{
printf("\n");
show();
printf("輸入需要選擇的功能:");
scanf("%d", &i);
switch (i) //通過輸入相應數字呼叫不同函式進行相應作業
{
case 1: Login();
break;
case 2:DeleteList();
break;
case 3:printlist();
break;
case 4:FreeList();
break;
default:
printf("\n 輸入錯誤,請從新選擇\n");
break;
}
} while (i != 4);
system("pause");
return 0;
}
此框架可以應用于很多要求使用結構體和鏈表的C語言大作業
請大一小白兔們認真理解鏈表的操作
再根據作業要求添加函式實作功能
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237644.html
標籤:其他
上一篇:數字邏輯期末知識點總結
