當前位置:首頁 » 編程語言 » c語言雙向鏈表

c語言雙向鏈表

發布時間: 2025-08-12 04:00:52

Ⅰ 用c語言怎麼編出來課程表

一、功能模塊概要說明:
1.輸入函數:
char* uscanf(int,int,int) //圖形模式下輸入函數,大小寫26個字母0-9數字外加空格鍵為有效輸入,可以使用BACKSPACE。
2.開始界面,退出界面和主界面:
void starting() //開始界面
void end() //結束界面
char* index() //主選擇界面函數,返回選擇信息(字元串);
3.數據輸入、創建鏈表模塊
char* tinkey(char*,int,int) //輸入切換處理
char* recourse(char*,int,int) //課程輸入
int wdetect(struct person*,char*) //課程輸入檢測,檢測課表一星期同一天同一時間段內課程安排是否重復,如果重復給出修改提示信息
char* infuse(char*,char*,int) //課表輸入
struct course *ccreat(char*) //創建課程單向鏈表
struct person* pcreat(char *) //創建個人課表節點
char *infcreat(char**,struct person**,struct person**,char*)
//創建課表雙向鏈表
4.課表輸出
char *print(char*) //課表輸出背景界面
char *pkey() //課表輸出按紐界面及處理
int table(int,int,struct person*) //在指定區域一表格形式輸出一個人的課表
int forebox(struct person*) //初略顯示下三個人的課表提示
5.文件存儲和裝載
char* save(char *,struct person *) //保存為磁碟文件,在圖形模式下進行文件讀寫操作之後,程序出現莫名其妙的異常顯示情形
6.課表查詢:
struct person *pdemand(struct person *,char *) //按人名字查詢其課表安排。
struct person* wddemand(struct person*,int) //按星期幾查詢課程安排情況。
struct person *cdemand(struct person *,char *) //按課程查詢老師或學生課程安排情況。
char *demand(struct person *) // 查詢切換,並顯示查詢結果,按名字查詢一次只能一個。按星期幾和課程查詢可以查詢到多個,如查詢到多個接果,按任意鍵可依次輸出。
7.排序。
struct course *csort(struct course *) //按課程編號排序課表節點中課程鏈表
struct person *psort(struct person *) //按人學號或老師編號排序課表鏈表
char sort(struct person*) //排序切換,並提示排序結果
8.插入。
char *insert(char *,struct person **,struct person **)
//擦入課表節點
9.刪除。
char *delete(struct person **,char *)
//按人名刪除其課表節點

二、操作說明:
1. Infuse:選定這個鍵後按Enter進入學生輸入菜單,你可以輸入學生的學號,姓名,學生在一學期內的所學課程的課程名,課程號,學時,以及在一周內上課的地址。如果當輸入某課程上課地址有重復時,系統自動發出報警信息,並提示出錯的地方,以便修改,
當選定couse時,表明此學生所學的該課程的信息輸入完成再輸入另外所學課程的信息,如上所寫照樣輸入,
當選定finish時,並按回車鍵後,表明此學生在這一學期內所學的課程信息輸入完成。如要繼續輸入學生的信息如前所述。
當選定back時,並按下回車鍵後,返回TIME TABLE主菜單,選擇主菜單里的功能對所輸入的信息進行處理。
當選定exit時,並按下回車鍵後,返回程序。結束程序。
2.SAVE/LOAD 選定此並按回車。此鍵作用對所輸入的信息進行格式輸出/載入。輸入你要保存信息的文件名,文件格式系統自動生成。利用鍵盤上的方向鍵和TAB鍵進行控制。
3.DEMAND:按ENTER鍵開始輸入,按反向鍵進行查詢切換。當按星期幾和課程查詢時候,如遇到查詢到多個結果,按任意鍵可依次輸出直到完。
4.INSERT:按ENTER鍵開始輸入,按反向鍵進行查詢切換。輸入同INFURE項。
5. DELETE: 按ENTER鍵顯示輸入框開始輸入。其他同上。
6.SORT:當提示框中SORT變為紅色時候,表示被選中,按ENTER鍵開始插入,如成功給出提示信息。
7.PRINT:依次輸出鏈表,如果輸出鏈表為空則不進仍輸出頁面。NEXT為下一個,PRO為上一個。下面FORENOTICE 框顯示後三個節點。
8.EXIT:退出系統。效果同按ESC。

三、常式:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain()
{
char*p[8][5],*a;
inti=0,j=0,n;
a=(char*)malloc(sizeof(char));
for(j=0;j<5;j++)
for(i=0;i<8;i++)
{
printf("周%d第%d節",j+1,i+1);
scanf("%s",a);
p[j][i]=a;
a=(char*)malloc(sizeof(char));
}
printf("周一 周二 周三 周四 周五 ");
for(j=0;j<5;j++){
for(i=0;i<8;i++)
{
printf("%s ",p[j][i]);
}
printf(" ");
}
}

Ⅱ C語言中->是什麼意思啊

「->」是一個整體,它是用於指向結構體子數據的指針,用來取子數據。

換種說法,如果我們在C語言中定義了一個結構體,然後申明一個指針指向這個結構體,那麼我們要用指針取出結構體中的數據,就要用到「->」。

問題中的p=p->next ,意思是將p指向的一個結構體實例中的自數據next賦值給p。

(2)c語言雙向鏈表擴展閱讀:

在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問

定義與聲明:

結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。

Ⅲ 求一個只用c語言編寫的倉庫管理系統

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#definemax32
intifempty=0;//標志,判斷鏈表是無否為空

typedefstructdnode/*定義雙向鏈表結構體*/
{
intnumber;/*貨物編號*/
charname[max];/*貨物名稱*/
intcounter;/*貨物數量*/
structdnode*prior,*next;
/*定義兩指針,分別指向其前驅和後繼*/
}dlnode;

dlnode*create(dlnode*L);
dlnode*input(dlnode*L);
dlnode*output(dlnode*L);
dlnode*outnum(dlnode*L);
dlnode*outname(dlnode*L);
dlnode*current(dlnode*L);
voidsearch(dlnode*L);
voidprint(dlnode*L);
voidsearchnum(dlnode*L);
voidsearchname(dlnode*L);
voiddisplay(dlnode*L);

voidmain()
{
intx;
dlnode*L;
if(!(L=(dlnode*)malloc(sizeof(dlnode))))//分配空間
{
printf(" ");
exit(1);
}
create(L);///調用函數,創建頭節點
while(1)
{////////////////////////主菜單///////////////////////////
printf("============================ ");
printf("1.貨物出庫和入庫 ");
printf("2.查找貨物表 ");
printf("3.顯示倉庫貨物表 ");
printf("4.輸出到文件 ");
printf("0.退出 ");
printf("============================= ");
printf("選擇0--3:");
scanf("%d",&x);
switch(x)
{
case2:search(L);break;//調用查找函數
case1:current(L);break;//調用入庫出庫函數
case3:display(L);break;//調用顯示輸出函數
case4:print(L);break;//調用列印函數
case0:printf(" bye!seeyou! ");
getchar();getchar();exit(0);//退出程序
default:printf(" Entererreor!pleaseinput0--4!");
getchar();getchar();
}
}
}
dlnode*create(dlnode*L)//創建鏈表頭節點
{
printf("歡迎使用我的倉庫管理系統");
getchar();
ifempty=0;
///////初始化頭節點的值////////
L->next=NULL;L->prior=NULL;
L->number=L->counter=0;
strcpy(L->name,"");
returnL;
}

voidsearch(dlnode*L)///查找的主要菜單
{
inty;
if(ifempty==0)
{
printf("沒有輸入貨物! ");
getchar();getchar();
return;
}
else
{
while(1)
{
printf("===================== ");
printf("1.按編號查詢 ");
printf("2.按貨物名稱查詢 ");
printf("0.返回上一層 ");
printf("==================== ");
printf("選擇0--2:");
scanf("%d",&y);
switch(y)
{
case1:searchnum(L);break;//調用按編號查找的函數
case2:searchname(L);break;//調用按名稱查找的函數
case0:return;//返回
default:printf("entererror!Pleaseinput0--2! ");
getchar();getchar();printf(" ");
}
}
}
}
voidsearchnum(dlnode*L)///按編號查找的函數
{
intnum,flag=0;//flag為是否找到的標志
dlnode*head=L;
if(ifempty==0)
{
printf("沒有貨物被輸入 ");
getchar();getchar();
return;
}
printf("輸入你要查找的貨物編號: ");
scanf("%d",&num);
while((L=L->next)!=head)
{
if(L->number==num)
{flag=1;//flag為1時表示找到
printf("找到指定編號貨物 ");
printf(" 編號:%d ",L->number);
printf("名稱:%s ",L->name);
printf("數量:%d ",L->counter);
}
}
if(flag==0)//flag為0時表示沒有找到
printf("沒有找到指定編號貨物,請查看是否還有貨物。 ");
getchar();getchar();
}

voidsearchname(dlnode*L)//按名稱查找的函數
{
intflag=0;//flag為是否找到的標志
charna[32];
dlnode*head=L;
if(ifempty==0)
{
printf("沒有貨物被輸入 ");
getchar();getchar();
return;
}
printf("輸入你要查找的貨物名稱 ");
scanf("%s",&na);
while((L=L->next)!=head)
{
if(strcmp(L->name,na)==0)
{flag=1;//flag為1時表示找到
printf("找到指定名稱貨物 ");
printf(" 編號:%d ",L->number);
printf("名稱:%s ",L->name);
printf("數量:%d ",L->counter);
}
}

if(flag==0)//flag為0時表示沒有找到
printf("沒有找到指定編號貨物,請查看是否還有貨物。 ");
getchar();getchar();
}

dlnode*current(dlnode*L)//貨物出庫入庫函數
{
inty;
while(1)
{
printf("======================== ");
printf("1.貨物入庫 ");
printf("2.貨物出庫 ");
printf("0.返回上一層 ");
printf("======================== ");
printf("選擇0--2:");
scanf("%d",&y);
switch(y)
{
case1:input(L);break;//調用入庫函數
case2:output(L);break;//調用出庫函數
case0:return(L);//返回上一層
default:printf("entererror!Pleaseinput0--2!");
getchar();getchar();
printf(" ");
}
}
}

dlnode*input(dlnode*L)//定義入庫函數
{
dlnode*in,*head;
head=in=(dlnode*)malloc(sizeof(dlnode));//分配空間
head=L;

printf(" 請輸入貨物數據: ");
printf("編號:");scanf("%d",&in->number);
printf("名稱:");scanf("%s",&in->name);
printf("數量:");scanf("%d",&in->counter);

if(L->next==NULL)//如果只有頭節點,
{//把剛輸入的in節點
L->next=in;//跟在頭節點後面
L->prior=in;//
in->next=L;//
in->prior=L;//
ifempty++;//ifempty加1
}
else
{//如果當前L的下一個節點不是頭節點
while((L=L->next)!=head)
{//如果輸入的數大於L->number,則插到L的前面
if(L->number<in->number)
{
in->next=L;
in->prior=L->prior;
L->prior->next=in;
L->prior=in;
ifempty++;//ifempty加1
return(head);
}
}
//輸入的編號比其它編號都小,則插到最後個節點,並首尾相連
head->prior->next=in;
in->prior=head->prior;
head->prior=in;
in->next=head;
ifempty++;//ifempty加1
}
returnhead;
}

dlnode*output(dlnode*L)//出庫的函數
{
inty;
dlnode*head=L;
if(ifempty==0)//檢測是否有貨物輸入
{
printf("沒有貨物輸入系統 ");
getchar();getchar();
return(head);
}
while(1)
{
printf("============= ");
printf("1.按編號出庫 ");
printf("2.按名稱出庫 ");
printf("0.返回上一層 ");
printf("============== ");
printf("選擇0--2:");scanf("%d",&y);
switch(y)
{
case1:outnum(L);break;//調用按編號出庫函數
case2:outname(L);break;//調用按名稱出庫函數
case0:return(L);
default:printf("entererror!Pleaseinput0--2!");
getchar();getchar();printf(" ");
}
}
}
dlnode*outnum(dlnode*L)//按編號出庫函數
{
intnum;
dlnode*head=L;

printf("請輸入出庫貨物的編號:");
scanf("%d",&num);
while((L=L->next)!=head)
{//如果找到就刪除節點
if(L->number==num)
{
L->prior->next=L->next;
L->next->prior=L->prior;
ifempty--;//ifempty減1
printf("編號為%d的貨物成功出庫",num);
getchar();getchar();
returnhead;
}
}
printf("沒有此編號的貨物,請查看是否還有貨物。 ");
getchar();getchar();
return(head);
}

dlnode*outname(dlnode*L)//按名稱出庫函數
{
charna[32];
dlnode*head=L;

printf("請輸入出庫貨物的名稱:");
scanf("%s",&na);
while((L=L->next)!=head)
{//如果找到就刪除節點
if(strcmp(L->name,na)==0)
{
L->prior->next=L->next;
L->next->prior=L->prior;
ifempty--;//ifempty減1
printf("名稱為%s的貨物成功出庫",na);
getchar();getchar();
return(head);
}
}
printf("沒有此名稱的貨物,請查看是否還有貨物。 ");
getchar();getchar();
return(head);
}

voiddisplay(dlnode*L)//顯示貨物清單
{
dlnode*head=L;
if(ifempty==0)
{
printf("沒有貨物可顯示 ");
getchar();getchar();
return;
}
L=L->next;
do
{
printf(" 編號:%d ",L->number);
printf("名稱:%s ",L->name);
printf("數量:%d ",L->counter);
}while((L=L->next)!=head);
getchar();getchar();
}
voidprint(dlnode*L)
{
dlnode*head=L;
L=L->next;
charfilename[max];
FILE*out;
if(ifempty==0)
{
printf("沒有貨物可輸出 ");
getchar();getchar();
return;
}
printf("請輸入文件名稱:");
scanf("%s",filename);
if((out=fopen(filename,"w"))==NULL)
{
printf("打開文件失敗! ");
getchar();getchar();
return;
}
do{
fprintf(out,"編號:%d 名稱:%s 數量:%d ",L->number,L->name,L->counter);
}while((L=L->next)!=head);
printf("輸出成功 ");getchar();getchar();
fclose(out);
}

熱點內容
安卓網頁翻譯是什麼翻譯 發布:2025-08-12 06:53:07 瀏覽:706
一般機頂盒密碼是多少 發布:2025-08-12 06:52:21 瀏覽:74
編譯方法概述 發布:2025-08-12 06:48:38 瀏覽:860
如何保存samp伺服器 發布:2025-08-12 06:43:49 瀏覽:34
智能車電磁演算法 發布:2025-08-12 06:41:36 瀏覽:341
ae配置需要注意什麼 發布:2025-08-12 06:20:26 瀏覽:915
卷紙的存儲 發布:2025-08-12 06:10:34 瀏覽:817
壓縮機比 發布:2025-08-12 06:09:50 瀏覽:989
光遇為什麼區別對待安卓和蘋果 發布:2025-08-12 06:02:18 瀏覽:712
伺服器搭建mc教程 發布:2025-08-12 06:02:12 瀏覽:14