❶ c語言 用文字描述鏈表創建的過程
? 鏈表的創建過程有以下幾步:
1 ) 定義鏈表的數據結構。
2 ) 創建一個猜慶空表。
3 ) 利用m a l l o c ( )函數向系統申請分配一個節點。
4 ) 將新節點的指針成員賦值為空。若是空表,將新節點連接到表頭;賀兆搏若是非空表,將新
節點接到表尾。
5 ) 判斷一下是否有後續節點要接入鏈表,若有轉到3 ),否則結禪祥束。
❷ c語言鏈表建立
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{
char sno[10];
char name[10];
float score[3];
}Student;
typedef struct node
{
Student data;
struct node *next;
}LinkList;
Student s;
LinkList *head=NULL;
LinkList *last=NULL;
void Create(Student s)
{
LinkList *p;
p=(LinkList*)malloc(sizeof(LinkList));
p->data=s;
p->next=NULL;
if(head!=NULL)
{
last->next=p;
last=p;
}
else
{
head=p;
last=p;
}
}
void OutPut()
{
LinkList *p;
p=head;
while(p!=NULL)
{
printf("\n%5s%5s%5.1f%5.1f%5.1f",p->data.sno,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2]);
p=p->next;
}
}
void Delete(LinkList *p) //*p 是要刪除的節點
{
LinkList *q;
q=head;
while(q!=NULL && q->next!=p)
q=q->next;
if(q==NULL)printf("\則敗nNode not exist!");
else
{
printf("刪除的節點是:");
printf("\n%5s%5s%5.1f%5.1f%5.1f",p->data.sno,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2]);
q->next=p->next;
free(p);
}
}
void Append(Student s)
{
LinkList *p;
LinkList *q;
p=last; //尾插法
q=(LinkList*)malloc(sizeof(LinkList));
q->data=s;
q->next=p->next;
p->next=q;
}
void Save()
{
FILE *fp;
LinkList *p;
p=head;
// char filename="student.txt"
if(fp=fopen("filename","wb")==NULL)printf("\nfile open error");
while(p)
{
if(fwrite(&(p->data),sizeof(Student),1,fp)!=1)
printf("\nfile write error");
p=p->next;
}
fclose(fp);
}
LinkList * Query(Student s)
{
LinkList *q;
q=head;
while(q!=NULL)
{
if(strcmp(q->data.sno,s.sno)!=0)
q=q->next;
else break;
}
return q;
}
int main()
{
LinkList *p;
int ch;
do
{
system("cls");
printf("\n1.創建 2.添加 3.刪除 4.查詢 5.保拍盯槐存文件 6.輸出 0.退出\n");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\n請輸入:學號,姓名,三門分數\n");
scanf("%s%s%f%f%f",&s.sno,&s.name,&s.score[0],&s.score[1],&s.score[2]);
Create(s);break;
case 2:printf("\n請輸入:學號,姓名,三門分數\n");
scanf("%s%s%f%f%f",&s.sno,&s.name,&s.score[0],&s.score[1],&s.score[2]);
Append(s);break;
case 3:printf("\n請輸襲友入要刪除的學號:"); //按學號刪除;
scanf("%s",&s.sno);
p=Query(s);
Delete(p);break;
case 4:printf("\n請輸入要查詢的學號:"); //按學號查詢
scanf("%s",&s.sno);
p=Query(s);
printf("\n%5s%5s%5.1f%5.1f%5.1f",p->data.sno,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2]);
break;
case 5:Save();break;
case 6:OutPut();break;
case 0:exit(0);
}
printf("\npress any key return to menu...");
getch();
}while(1);
return 0;
}
.....
❸ C語言 關於鏈表的創建
#include<stdio.h>
#include<stdlib.h>
typedefintelemtype;
typedefstructLnode{
elemtypedata;
Lnode*next;
}Lnode;
Lnode*CreatList(Lnode*Head){
Head=(Lnode*)malloc(sizeof(Lnode));
Head->next=NULL;
Lnode*p=Head;
printf("請輸入元素的個數:");
inti,n;
scanf("%d",&n);
for(i=0;i<n;++i){
p->next=(Lnode*)malloc(sizeof(Lnode));
printf("請輸入第%d個元素:",i+1);
scanf("%d",&p->next->data);
p=p->next;
}
p->next=NULL;
returnHead;
}
voidAllList(Lnode*head){
Lnode*p=head->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf("
");
}
intmain(){
Lnode*head=NULL;
head=CreatList(head);
AllList(head);
return0;
}
❹ 用c語言建立一個有序鏈表
先按正常流程建立一個鏈表,再按照其某一個成員值進行冒泡排序(排序過程的交換,只交換鏈表指針以外的成員值)。
演示代碼如下:(演示代碼鏈表20個節點,成員值為隨機值)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct slist
{
int a;
struct slist *next;
}SLIST;
SLIST *init();//生成20個節點成員為隨機數的鏈表
void showList(SLIST *slHead);//列印鏈表
void px(SLIST *slHead,int flag);//float=1:降序。=2升序
int main()
{
SLIST *slHead=NULL;
slHead=init();
printf("排序前: ");
showList(slHead);
printf(" 降序排序後: ");
px(slHead,1);
showList(slHead);
printf(" 升序排序後: ");
px(slHead,2);
showList(slHead);
return 0;
}
void px(SLIST *slHead,int flag)//flag=1:降序。=2升序
{
SLIST *sl0=slHead->next,*sl1=NULL,slSave,*pSave=NULL;
while(sl0)
{
sl1=sl0->next;
while(sl1)
{
if((flag==1 && sl0->a<sl1->a)||(flag==2 && sl0->a>sl1->a))
{
slSave=*sl0;
*sl0=*sl1;
sl0->next=slSave.next;
pSave=sl1->next;
*sl1=slSave;
sl1->next=pSave;
}
sl1=sl1->next;
}
sl0=sl0->next;
}
}
void showList(SLIST *slHead)
{
int i=0;
while(slHead->next)
{
printf("節點%d成員值:%d ",++i,slHead->next->a);
slHead=slHead->next;
}
printf(" ");
}
SLIST *init()
{
int num,cnt=20;
static SLIST head;
SLIST *slHead=&head,*slTail=NULL,*slNew=NULL;
slHead->next=NULL;
srand(time(NULL));
while(cnt--)
{
num=rand()%100;
slNew=(SLIST *)malloc(sizeof(SLIST));
if(!slNew)return NULL;
slNew->a=num;
slNew->next=NULL;
if(!slHead->next)
slHead->next=slNew;
else
slTail->next=slNew;
slTail=slNew;
}
return slHead;
}
❺ C語言鏈表的建立
參考以前寫的這個吧,寫的不好,你修改吧
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define CD sizeof(struct Biao)
struct Biao
{
int num;
struct Biao *next;
};
int m,x;
int main()
{
struct Biao *jianli();
void paixu(struct Biao *n);
void chashu(struct Biao *n);
void shanshu(struct Biao *n);
void qiupingjun(struct Biao *n);
void tuichu();
int n;
struct Biao *t;
printf("1.建立鏈表\n2.排序\n3.插數\n4.刪數\n5.求平均值\n");
printf("請輸入選項:\n");
for(;;)
{
scanf("%d",&n);
switch(n)
{
case 1:t=jianli();break;
case 2:paixu(t);break;
case 3:chashu(t);break;
case 4:shanshu(t);break;
case 5:qiupingjun(t);break;
case 6:tuichu();break;
default:printf("輸入錯誤!請重新輸入\n");
}
}
}
struct Biao *jianli()
{
int i,j;
printf("建立鏈表,請輸入數據:\n");
struct Biao *head,*p1,*p2;
p1=p2=(struct Biao * )malloc(CD);//if(p1==NULL)建立鏈表失敗
for(i=0;i<=100;i++)
{
if(i==0)
{
head=p1;
p2->next=p1=(struct Biao * )malloc(CD);
p2=p1;
continue;
}
if(p1==NULL)
break;
else
{
scanf("%d",&p1->num);
if(p1->num==-1)
{
p2->num=NULL;
break;
}
p2->next=p1=(struct Biao * )malloc(CD);
p2=p1;
}
}
if(head->next->num==NULL)
printf("您建立了一個空鏈表\n");
else
{
printf("共有數據:%d\n",i-1);
m=i-1;
printf("輸出鏈表:\n");
p1=head->next;
for(j=0;j<i-1;j++)
{
printf("%d ",p1->num);
p1=p1->next;
}
}
printf("\n");
return(head);
}
void paixu(struct Biao *n)
{
int i,j,a,temp;
a=m;
struct Biao *p1,*p2,*tp;
p2=p1=n->next;
printf("從小到大排序結果:\n");
for(i=0;i<a-1;i++)
{
p1=p2;
tp=p1;
for(j=i+1;j<a;j++)
{
if((p1->next->num)<(tp->num))
{
tp=p1->next;
}
p1=p1->next;
}
temp=tp->num;tp->num=p2->num;p2->num=temp;
p2=p2->next;
}
p1=n->next;
for(i=0;i<a;i++)
{
printf("%d ",p1->num);
p1=p1->next;
}
printf("\n");
}
void chashu(struct Biao *n)
{
int a,i,j;
struct Biao *p1,*p2,*tp;
m=m+1;
x=m;
a=m;
p1=n;
printf("請插入數字:\n");
p2=(struct Biao *)malloc(CD);
scanf("%d",&p2->num);
p1=n->next;
for(i=0;i<a-1;i++)
{
if(p1->num<=p2->num&&p1->next->num>p2->num)
{
tp=p1->next;
p1->next=p2;
p2->next=tp;
break;
}
if(p1->num<p2->num&&p1->next->num>p2->num)
{
tp=p1->next;
p1->next=p2;
p2->next=tp;
break;
}
if(n->next->num>p2->num)
{
tp=n->next;
n->next=p2;
p2->next=tp;
break;
}
p1=p1->next;
}
p1=n;//
for(i=0;i<a-1;i++)
{
p1=p1->next;
}
if(p1->num<=p2->num)
{
tp=p1->next;
p1->next=p2;
p2->next=tp;
}//演算法不簡便
printf("插入後的數據:\n");
p1=n->next;
for(i=0;i<a;i++)
{
printf("%d ",p1->num);
p1=p1->next;
}
printf("\n");
printf("數據個數:%d\n",a);
}
void shanshu(struct Biao *n)
{
int a,i,j;
a=x;
struct Biao *p1,*p2;
printf("請輸入要刪除的數:\n");
scanf("%d",&j);
for(;;)
{
p1=n;
for(i=0;i<a;i++)
{
if(p1->next->num==j)
{
p2=p1->next;
p1->next=p1->next->next;
a-=1;
x-=1;
break;
}
p1=p1->next;
}
if(i==a)
break;
}
printf("結果:\n");
p1=n->next;
for(i=0;i<a;i++)
{
printf("%d ",p1->num);
p1=p1->next;
}
printf("\n");
printf("剩餘數據個數:%d\n",x);
}
void qiupingjun(struct Biao *n)
{
int s,i;
struct Biao *p1;
s=0;
p1=n->next;
for(i=0;i<x;i++)
{
s+=p1->num;
p1=p1->next;
}
printf("平均值為:%f\n",s*1.0/x);
}
void tuichu()
{
exit(0);
}
❻ 用c語言創建鏈表
void CreateList_H(Linklist L,int n)中的L是局部變數,你生成的頭結點L不能被返回,應該改為:
Linklist CreateList_H(int n)
調用方式和函數內部返回值都需要相應改動。
❼ 如何用C語言編寫一個鏈表
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
struct Node
{
int data;//數據域
struct Node * next;//指針域
};
/*************************************************************************************
*函數名稱:Create
*函數功能:創建鏈表.
*輸入:各節點的data
*返回值:指針head
*************************************************************************************/
struct Node * Create()
{
struct Node *head,*p1,*p2;
head = NULL;
p1 = p2 = (struct Node *)malloc(sizeof(struct Node));
printf("Input the linklist (Input 0 to stop):\n");
scanf("%d",&p1->data);
while(p1->data!=0)
{
if(head == NULL){
head = p1;
}else{
p2->next = p1;
p2 =p1;
}
p1 = (struct Node *)malloc(sizeof(struct Node));
scanf("%d",&p1->data);
}
p2->next = NULL;
return head;
}
/*************************************************************************************
*函數名稱:insert
*函數功能:在鏈表中插入元素.
*輸入:head 鏈表頭指針,p新元素插入位置,x 新元素中的數據域內容
*返回值:無
*************************************************************************************/
void insert(struct Node * head,int p,int x)
{
struct Node * tmp = head;
struct Node * tmp2 ;
int i ;
for(i = 0;i<p;i++)
{
if(tmp == NULL)
return ;
if(i<p-1)
tmp = tmp->next;
}
tmp2 = (struct Node *)malloc(sizeof(struct Node));
tmp2->data = x;
tmp2->next = tmp->next;
tmp->next = tmp2;
}
/**************************************************************************************
*函數名稱:del
*函數功能:刪除鏈表中的元素
*輸入:head 鏈表頭指針,p 被刪除元素位置
*返回值:被刪除元素中的數據域.如果刪除失敗返回-1
**************************************************************************************/
int del(struct Node * head,int p)
{
struct Node * tmp = head;
int ret , i;
for(i = 0;i<p;i++)
{
if(tmp == NULL)
return -1;
if(i<p-1)
tmp = tmp->next;
}
ret = tmp->next->data;
tmp->next = tmp->next->next;
return ret;
}
/**************************************************************************************
*函數名稱:print
*函數功能:列印鏈表中的元素
*輸入:head 鏈表頭指針
*返回值:無
**************************************************************************************/
void print(struct Node *head)
{
struct Node *tmp;
for(tmp = head; tmp!=NULL; tmp = tmp->next)
printf("%d ",tmp->data);
printf("\n");
}
/**************************************************************************************
*函數名稱:main
*函數功能:主函數創建鏈表並列印鏈表。
**************************************************************************************/
int main(){
struct Node * head = Create();
print(head);
return 0;
}
❽ C語言鏈表的建立是什麼
#include
❾ C語言 建立鏈表(鏈表的結點類型與成員個數等由學生自己定義)
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"
#include"conio.h"
/*定義DataType為int類型*/
typedef int DataType;
#define TRUE 1
#define FALSE 0
/*單鏈表的結點類型*/
typedef struct LNode
{DataType data; <br/> struct LNode *next; <br/> }LNode,*LinkedList;
/*初始化單鏈表*/
LinkedList LinkedListInit()
{LinkedList L; <br/> L=(LinkedList)malloc(sizeof(LNode)); <br/> L->next=NULL;<br/> printf("初始化單鏈表成功\n"); <br/> return L; <br/>}
/*清空單鏈表*/
void LinkedListClear(LinkedList &L)
{L->next=NULL; <br/> printf("鏈表已經清空\n"); <br/>}
/*檢查單鏈表是否為空*/
int LinkedListEmpty(LinkedList &L)
{if(L->next==NULL) <br/> {printf("單鏈表為空\n"); return TRUE;}
else
{printf("單鏈表非空\n");return FALSE;}
}
/*遍歷單鏈表*/
void LinkedListTraverse(LinkedList &L)
{LinkedList p; <br/> p=L->next; <br/> if(p==NULL) <br/> printf("單鏈表為空表\n"); <br/> else <br/> {printf("鏈表中的元素為:\n"); <br/> while(p!=NULL) <br/> {printf("%d ",p->data); p=p->next;}
}
printf("\n");
}
/*求單鏈表長度*/
int LinkedListLength(LinkedList &L)
{LinkedList p; <br/> int j; <br/> p=L->next; <br/> j=0; <br/> while(p!=NULL) <br/> { j++; p=p->next;}
return j;
}
/*從鏈表中查找元素*/
LinkedList LinkedListGet(LinkedList &L,int i)
{LinkedList p;<br/> p=L->next;int j=1; <br/> while(p&&j<i) {p=p->next; j++;}
if(p) printf("位序為%d的元素的值為%d\n",i,p->data);
else printf("查詢位置不正確\n");
}
/*從鏈表中查找與給定元素值相同的元素在順序表中的位置*/
int LinkedListLocate(LinkedList &L,DataType x)
{LinkedList p;int i=1; <br/> p=L->next; <br/> while(p && p->data != x) {p=p->next;i++;}
if(p) {printf("所查找的元素%d在表中的位置為%d\n",x,i);return i; }
else {printf("所查找的元素%d不存在\n",x);return 0; }
}
/*向鏈表中插入元素*/
void LinkedListInsert(LinkedList &L, int i, DataType x)
{LinkedList p,s;<br/> int j=0; p=L; <br/> while(p&&j<i) {p=p->next;j++;}
if(!p||j>i) printf("插入位置不正確\n");
else
{s=(LNode *)malloc(sizeof(LNode)); <br/> s->data=x; <br/> s->next=p->next; <br/> p->next=s; <br/> printf("在表中第%d個節點後插入%d成功\n",i,x); <br/> }
}
/*從鏈表中刪除元素*/
void LinkedListDel(LinkedList &L,int i)
{ LinkedList p,q;
int j=0;
p=L;
while(p->next&&j<i-1) {p=p->next;j++;}
if(p->next==NULL)
printf("刪除位置不正確\n");
else
{q=p->next;p->next=q->next;free(q);<br/> printf("第%d個元素已從鏈表中刪除\n",i);<br/> }
}
/*最後改好的將頭插發改為尾插法了*/
LinkedList LinkedListCreat(LinkedList&L,int n) /*建立單鏈表*/
{ int i;
DataType x;
LinkedList p;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;--i)
{p=(LinkedList)malloc(sizeof(LNode));<br/> printf("請依次輸入鏈表中的元素:");<br/> scanf("%d",&x);<br/> p->data=x;<br/> p->next=L->next;L->next=p;<br/> }
printf("輸入完畢\n");
return L;
}
main()
{printf("請用數字鍵選擇操作\n\n");<br/> printf("1.初始化\n");<br/> printf("2.建立單鏈表\n");<br/> printf("3.清空\n");<br/> printf("4.求鏈表長度\n");<br/> printf("5.檢查鏈表是否為空\n");<br/> printf("6.遍歷鏈表\n");<br/> printf("7.從鏈表中查找元素\n");<br/> printf("8.從鏈表中查找與給定元素值相同的元素在順序表中的位置\n");<br/> printf("9.向鏈表中插入元素\n");<br/> printf("0.從鏈表中刪除元素\n\n");<br/> printf("按其他鍵退出\n"); <br/> <br/>LinkedList L;<br/>int i,x,n,quit=0;<br/>while(!quit)<br/>switch(getch()) <br/>{<br/>case '1':L=LinkedListInit(); break;<br/>case '2':printf("請輸入需要的鏈表的長度為:");scanf("%d",&n);L=LinkedListCreat(L,n); break; <br/>case '3':LinkedListClear(L);break; <br/>case '4':printf("鏈表的長度為 %d(不含頭節點)\n",LinkedListLength(L)); break; <br/>case '5':LinkedListEmpty(L); break; <br/>case '6':LinkedListTraverse(L); break; <br/>case '7':printf("請輸入待查詢元素在鏈表中的位置:");scanf("%d",&i);LinkedListGet(L,i); break; <br/>case '8':printf("請輸入待查詢元素的值:"); scanf("%d",&x); LinkedListLocate(L,x); break; <br/>case '9':printf("請輸入插入元素的位置和值(中間用逗號隔開):\n"); scanf("%d,%d",&i,&x); <br/> LinkedListInsert(L,i,x); break; <br/>case '0':if(LinkedListEmpty(L)==1) printf("鏈表已經為空,不能刪除\n");<br/> else printf("請輸入待刪除元素的位置:\n"); scanf("%d",&i); LinkedListDel(L,i);<br/> break; <br/><br/>default:quit=1; <br/>}
}