當前位置:首頁 » 編程語言 » c語言單鏈表創建

c語言單鏈表創建

發布時間: 2023-05-18 10:20:52

c語言 單鏈表的創建

*creat a list*/
#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{ link ptr,head;
int num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please input 5 numbers==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4) ptr->next=NULL;
else ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{ printf("The value is ==>%d\n",ptr->data);
ptr=ptr->next;
}
}

上面是一個簡單的創建鏈表的C程序。所謂鏈表形象的講就是一個數據塊裡面存有數據,並且存有下一個數據的指針,這樣一個指一個形成一個數據鏈。這個數據鏈可以被操作,例如插入數據,刪除數據,等。至於指令,首先定義一個結構體,它存有數據和指向下一個數據塊的指針。然後分配空間。注意最後一個為NULL,當然你也可以指向開頭一個數據塊形成一個循環鏈表

② c語言用函數創建單鏈表

#include<stdio.h>
#include<stdlib.h>
//鏈表定義
typedef int ElemType;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
* 鏈表函數 *
*************************************/
//鏈表初清運始化
void InitLink(LinkList &L);
//創建函數,尾插法
void CreateLink_T(LinkList &L,int n);
//創建函數,頭插法
void CreateLink_H(LinkList &L,int n);
//銷毀函數
void DestroyLink(LinkList &L);
//判斷是否為空函數
bool EmptyLink(LinkList &L);
//獲取函數
bool GetLink(LinkList &L,int i,int & e);
//答槐梁插入函數
void InsertLink(LinkList &L,int i,int e);
//刪除函數
void DeleteLink(LinkList &L,int i,int &e);
//遍歷函數
void TraverseLink(LinkList &L);
//鏈表長度函數
int LengthLink(LinkList &L);
//合並函數
void MergeLink(LinkList &L1,LinkList L2);
void main()
{
LinkList L1,L2;
InitLink(L1);
InitLink(L2);
CreateLink_H(L1,2);
CreateLink_T(L2,2);

TraverseLink(L1);
printf("\明帆n");
TraverseLink(L2);
printf("\n");

MergeLink(L1,L2);

TraverseLink(L1);
TraverseLink(L2);

}
//創建函數,尾插法
void InitLink(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if (!L)
{
printf("Init error\n");
return;
}
L->next=NULL;
}
void CreateLink_T(LinkList &L,int n)
{
if(n<1)
{
printf("n must >=1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p
printf("enter the data :\t");
scanf("%d",&(p->data));
p->next=L->next;
L->next=p;
}
}
}

//創建函數,頭插法
void CreateLink_H(LinkList &L,int n)
{
if (n<1)
{
printf("n must >=1\n ");
return;
}
else
{
//L=(LinkList)malloc(sizeof(LNode));
LinkList pre=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
pre=L;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("enter the data:\t");
scanf("%d",&(p->data));
pre->next=p;
pre=p;
}
pre->next=NULL;
}
}

//銷毀函數
void DestroyLink(LinkList &L)
{
LinkList q=L,p=L;
while (p)
{
q=p;
p=p->next;
free(q);
}
L->next=NULL;

}

//判斷是否為空函數
bool EmptyLink(LinkList &L)
{
if (NULL==L->next)
{
return true;
}
else
{
return false;
}
}

//獲取函數
bool GetLink(LinkList &L,int i,int& e)
{
if (i<1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if (!p||j>i)
{
return false;
}
else
{
e=p->data;
return true;
}

}
}

//插入函數
void InsertLink(LinkList &L,int i,int e)
{
if (i<0||i>LengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&(j<i))
{
p=p->next;
j++;
}
if (!p||j>i)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;

}
}

}

//刪除函數
void DeleteLink(LinkList &L,int i,int &e)
{
if(i<=0||i>LengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{
printf("please enter i again\n");
return;
}
else
{
LinkList q=p->next;
e=p->next->data;
p->next=p->next->next;
free(q);

}
}
}

//遍歷函數
void TraverseLink(LinkList &L)
{
LinkList p=L->next;
if(!p)
{
printf("the Link L is empty\n");
}
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
}
//鏈表長度函數
int LengthLink(LinkList &L)
{
int i=0;
LinkList p=L->next;
while(p)
{
p=p->next;
i++;
}
return i;
}

//合並函數
void MergeLink(LinkList &L1,LinkList L2)
{
int i=0,flag=0;
LinkList p1=L1->next,p2=L2->next;
LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode));

LinkList pre=p;
if (!p)
{
printf("MergeLink error\n");
return;
}
p->next=NULL;
while (p1&&p2)
{
if (p1->data>=p2->data)
{
InsertLink(p,i++,p2->data);
p2=p2->next;
}
else
{
InsertLink(p,i++,p1->data);
p1=p1->next;
}
}
while (p1)
{
InsertLink(p,i++,p1->data);
p1=p1->next;
}
while(p2)

{
InsertLink(p,i++,p2->data);
p2=p2->next;
}
while(pre)
{
pre=pre->next;
}

LinkList q=L1;
L1=p;
DestroyLink(q);
DestroyLink(L2);

}

③ 用C語言實現建立一個單鏈表的過程,並實現列印鏈表中每一個元素,寫出完整程序

這是個很簡單的鏈表創建和輸出

#include<stdio.h>

#include<stdlib.h>

typedef struct linkednode

{

char data;

struct linkednode *next;

}node,*link_list;//鏈表節點的結構及重命名

link_list creat()//創建一個鏈表返回類型是鏈表的首地址

{

link_list L;

node *p1,*p2;

char data;

L=(node*)malloc(sizeof(node));//開辟存儲空間

p2=L;

while((data=getchar())!=' ')//輸入回車鍵時結束輸入

{

p1=(node*)malloc(sizeof(node));

p1->data=data;

p2->next=p1;

p2=p1;

}

p2->next=NULL;

return L;

}

void print(link_list L)//把鏈表輸出

{

node *p;

p=L->next;

while(p!=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf(" ");

}

void main()

{

link_list L=NULL;

char x;

printf("請輸入鏈表節點: ");

L=creat();

print(L);

}

④ C語言中單鏈表的創建

struct infor
{
char name[10];//學生名稱
int age;//年齡
struct infor *next;//存儲下一個結構的地址
};//鏈表的數據結構

struct infor *head=NULL;//頭指針,指向第一個結構
struct infor *p,*c;//*p:是當前結構的前一個結構地址;*c:當前指針
char buf[10];//存放name的臨時數組
printf("Enter name:");//提示
while(scanf("%s",buf)==1 && buf[0]!='0')//name輸入0時結束
{
c=(struct infor *)malloc(sizeof(struct infor));//給結構分配內存
if(c==NULL)/無法分配內存
{
printf("No memory");
exit(1);
}
if(head==NULL)
{
head=c;//第一個結構核碧地址
}
else
{
p->next=c;//下一個結構的地址
}
c->next=NULL;//表示最後一個結構
strcpy(c->name,buf);//拷貝name到鏈表中
printf("Enter age:");
scanf("%d",&c->age);//輸入年齡
p=c;//指向埋氏陵前一個節點
printf("Enter name:");
}
c=head;
while(c!=NULL)
{
printf("name=%s age=%d\n",c->name,c->age);
c=c->next;
}//讀取鏈表中的信息
printf("over\n");
c=head;
while(c!=NULL)
{
free(c);
c=c->next;
}//釋放內存
運行結果:
Enter name:Jim
Enter age:25
Enter name:Tom
Enter age:36
Enter name:Jack
Enter age:65
Enter name:0
name=Jim age=25
name=Tom age=36
name=Jack age=65
over
//以上程序直接加到主函數中運行正彎戚常

⑤ C語言創建單鏈表

s* creat_list()函數改下:
s* create_list()
{
int a[]={1,2,3,4,5},j=4;
s *h,*p,*current;
h=(s *)malloc(sizeof(s));
current = h; /*current指針用於跟隨鏈表進度*/
h->next='侍橡\0';
while(j>=0)
{
p=(s *)malloc(sizeof(s));
p->i=a[j];
current->next=p;
current = p;
j--;

}
p ='\0';
current== '\0';
free(p);/*這里把氏談謹用完的空殲基間釋放掉,是個好習慣*/
free(current);
return h;
}

⑥ c語言創建單鏈表

#include<stdio.h>
#include<stdlib.h>
/*線性表*/
struct TLink {
int data;
struct TLink * next;
};/*end struct TLink*/

/*生成新元素*/
struct TLink * new_item(int number)
{
struct TLink * r = 0;
r = (struct TLink *)malloc(sizeof(struct TLink));
r->data = number;
r->next = 0;
return r;
}/*end new_item*/

/*在線性表中查詢數據*/
struct TLink * lookup(struct TLink * root, int number)
{
struct TLink * h = root;
while(h) {
if (h->data == number) return h;
h = h->next ;
}/*end lookup*/
return 0;
}

/*在線性表中追加一個數據*/
void append(struct TLink * * root, int number)
{
struct TLink * r = 0, * n = 0;
if (!root) return ;

/*不記錄重復元素*/
if (lookup(*root, number)) return;

/*如果表為空則新建表*/
r = *root;
if (!r) {
*root = new_item(number);
return ;
}/*end if*/

/*為保證為有序線性表,如果數據比表頭還小則作為表頭*/
if (number < r->data ) {
n = new_item(number);
n->next = r;
*root = n;
return ;
}/*end if*/

/*在有序線性表中查找位置插入元素*/
while(r) {
n = r->next ;

/*如果已經是表尾則直接追加*/
if (!n) {
n = new_item(number);
r->next = n;
return ;
}/*end if*/

/*在中央某處插入*/
if (number < n->data ) {
r->next = new_item(number);
r->next->next = n;
return ;
}/*end if*/
r = n;
}/*end while*/
}/*end append*/

/*列印有序線性表*/
void print(struct TLink * root)
{
struct TLink * r = root;
printf("【");
while(r) {
printf("%d ", r->data );
r = r->next ;
}/*end while*/
printf("\b】\n");
}/*end print*/

/*將有序線性表h1合並至有序線性表h0,並銷毀線性表h1*/
void merge(struct TLink ** h0, struct TLink ** h1)
{
struct TLink * h = 0, * k = 0;
if (!h0 || !h1) return ;
h = *h1;
while(h) {
append(h0, h->data );
k = h;
h = h->next ;
free(k);
}/*end h*/
h1 = 0;
}

int main(void)
{
int i = 0; struct TLink * x=0, *y = 0;
int a[] = {8,4,3,9,5,1};
int b[] = {7,2,1,5,6,0};
printf("原數據為:\n數組A:【");
for(i = 0; i < 6; i++) {
printf("%d ", a[i]);
append(&x, a[i]);
}/*next*/
printf("\b】\n數組B:【");
for(i = 0; i < 6; i++) {
printf("%d ", b[i]);
append(&y, b[i]);
}/*next*/
printf("\b】\n轉換為有序線性表\nA:");
print(x);
printf("B:");
print(y);
printf("AB合並後為:");
merge(&x, &y);
print(x);
return 0;
}

/*以上是順序線性表的合並程序,逆序只需將插入條件從小於改為大於即可。
合並結果如果要保留,把合並函數的lookup調用刪除即可*/

⑦ C語言單向鏈表的創建,輸入,插入和刪除的實現

/* 線性表-鏈表的操作: 只提供核心語句 */
#include "stdio.h"
#include "stdlib.h"
#define N 100
typedef int ElemType;/* 鏈表的存儲結構 */
typedef struct LNode{
ElemType data;
struct LNode *next; } LNode,*LinkList;/* 鏈表的基本操作 *//******* 1.初始化鏈表 ******/
void InitList(LinkList *L)
{ *L=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL; }/******* 2.銷毀鏈表 ******/
void DestroyList(LinkList *L)
{ LinkList p;
while(*L!=NULL)
{ p=*L;
*L=(*L)->next;
free(p); }
}
/******* 10.在順序表第n個位置頃亮兆插入元素e ******/
void ListInsert(LinkList *L, int n, ElemType e)
{ LinkList p,q,new; int i;
q=*L; p=(*L)->next; i=1;
while (p!=NULL && i<n) { q=p; p=p->next; i++; }
new=(LinkList)malloc(sizeof(LNode));
new->data=e;
q->next=new; new->next=p; }/******* 11.刪除鏈表中第n個位置的元素 ******/
void ListDelete(LinkList *L, int n, ElemType *e)
{ LinkList p,q; int i;
q=*L; p=(*L)->next; i=1;
while (p!=NULL && i<n) { q=p; p=p->next; i++; }
*e=p->data;
q->next=p->next; free(p); }/******* 12.遍歷鏈表並輸出 ******/
void ListTraverse(LinkList L)
{ LinkList p;
printf("\nList:\t");
p=L->next;
while (p!=NULL)
{ printf("%d\t",p->data);
p=p->next; }
}/******* A(2).後接法建立順序鏈表雀租 ******/
void CreateList2(LinkList *L, ElemType a[], int n)
{ LinkList p,new; int i;
p=*L;
for(i=0; i<n; i++)
{ new=(LinkList)malloc(sizeof(LNode));
new->data=a[i];
p->next=new; p=p->next; }
p->next=NULL;
}
/* 主函數 */
main()
{ LinkList La; ElemType a[]={1,3,5,7,9},x;
InitList(&La);//初始化鏈表
CreateList2(&La,a,5);//建立鏈表並用鍵寬數組賦值
ListTraverse(La);//遍歷鏈表
ListInsert(&La, 3, 100);//第三個位置插入100
ListTraverse(La);//遍歷鏈表
ListDelete(&La,5,&x);//刪除第五個元素,用x返回
ListTraverse(La);//遍歷鏈表 DestroyList(&La);//銷毀鏈表
} 這是我們剛學的,保證簡潔准確

⑧ 如何用C語言創建單鏈表!!!!!

用一個結構體
struct Node{
int value;
struct Node *next;
};
value是這個元素的值,*next是指向想一個或頌元素的指針,
跟數組的比較,數組可以直接通過下標查詢其中的元素比如a[9],而單鏈表只能遍歷第9個元素以前的所有元素才能找到第9個元素。單鏈沖舉表的插散團碧入和刪除比數組簡單

熱點內容
手機導航源碼下載 發布:2025-07-15 19:18:29 瀏覽:498
什麼是原生態安卓機 發布:2025-07-15 19:16:52 瀏覽:686
linux的安裝目錄在哪 發布:2025-07-15 19:10:04 瀏覽:724
2008編程入門經典 發布:2025-07-15 18:58:44 瀏覽:603
艾派密碼是什麼 發布:2025-07-15 18:47:40 瀏覽:588
密碼鎖如何在裡面開門 發布:2025-07-15 18:35:00 瀏覽:521
額溫演算法 發布:2025-07-15 18:18:14 瀏覽:728
ie客戶端事件腳本執行異常 發布:2025-07-15 18:10:13 瀏覽:26
自製壓縮兔糧 發布:2025-07-15 18:09:25 瀏覽:12
腳本病毒的危害 發布:2025-07-15 18:04:00 瀏覽:260