當前位置:首頁 » 編程語言 » c語言創建一個單列表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言創建一個單列表

發布時間: 2023-08-05 12:29:51

c語言如何創建單鏈表

C語言創建單鏈表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

intdata;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L->next=NULL;

printf("請輸入第1個數據:");

scanf("%d",&c);

L->data=c;

for(int i=2;i<=n;i++)

{

s=(List)malloc(sizeof(node));

printf("請輸入第%d個數據:",i);

scanf("%d",&c);

s->data=c;

s->next=L;

L->next =s;

}

printf("鏈表創建成功!");

}

void main()

{

int n;

printf("請你輸入鏈表的個數:");

scanf("%d",&n);

create(n);

}

㈡ 給出建立 n個結點的單項列表的實現代碼用C語言

#include <stdio.h> #include <stdlib.h> struct BiTreeNode { char data; struct BiTreeNode *rchild; struct BiTreeNode *lchild; }; void Create(struct BiTreeNode *&Tnode) //先序創建2叉鏈表 { char ch; scanf("%c",&ch); if(ch=='#') { Tnode=NULL; } else { Tnode=new BiTreeNode; Tnode->data=ch; Create(Tnode->lchild); Create(Tnode->rchild); } } void PreOrder(struct BiTreeNode *&Tnode) //先序遍歷2叉鏈表 { struct BiTreeNode *p; p=Tnode; if(Tnode) { printf("%c ",Tnode->data); PreOrder(Tnode->lchild); PreOrder(Tnode->rchild); } } void InOrder(struct BiTreeNode*&Tnode)//中序遍歷2叉表 { struct BiTreeNode *p; p=Tnode; if(Tnode) { InOrder(Tnode->lchild); printf("%c ",Tnode->data); InOrder(Tnode->rchild); } } void PostOrder(struct BiTreeNode *&Tnode)//後序遍歷2叉鏈表 { struct BiTreeNode *p; p=Tnode; if(Tnode) { PostOrder(Tnode->lchild); PostOrder(Tnode->rchild); printf("%c ",Tnode->data); } } int main() { struct BiTreeNode *Tnode; Create(Tnode); PreOrder(Tnode); printf("\n"); InOrder

㈢ c語言怎樣編程做一個表格求具體方法,感激不盡。

簡單來說可以用數組來實現,
例如定義3X3表格char A[33],A[00]~A[03]存放表格屬性,剩下的存放數據
舉個例子抽象出來就是:姓名(A00) 性別(A01) 年齡(A02)
小王(A10) 男(A11) 30(A12)
大王(A20) 男(A21) 30(A22)

㈣ 如何用C語言或C++實現一個List類

  1. C語言沒有類的概念。C++有現成的List類, #include<list>即可。

  2. 如果要自己實現可以參考C++數據結構的書籍,是最基本的練習。

    這里實現一個簡單的常式,請參考:

    #include<iostream>
    #include<fstream>
    #include<stdlib.h>
    #include<string.h>
    usingnamespacestd;
    #include<stdio.h>
    #include<string>

    #include"math.h"

    template<classT>classList{
    public:
    List()//構造函數
    {
    pFirst=NULL;
    }

    voidAdd(T&t)//在Link表頭添加新結點
    {
    if(pFirst==NULL)
    {
    pFirst=newNode;
    *(pFirst->pT)=t;
    }
    else
    {
    Node*pNewNode=newNode;
    *(pNewNode->pT)=t;
    pNewNode->pNext=pFirst;
    pFirst=pNewNode;
    }
    }

    voidRemove(T&t)//在Link中刪除含有特定值的元素
    {
    Node*pNode=pFirst;
    if(*(pNode->pT)==t)
    {
    pFirst=pFirst->pNext;
    deletepNode;
    return;
    }
    while(pNode!=NULL)
    {
    Node*pNextNode=pNode->pNext;
    if(pNextNode!=NULL)
    {
    if(*(pNextNode->pT)==t)
    {
    pNode->pNext=pNextNode->pNext;
    deletepNextNode;
    return;
    }
    }
    else
    return;//沒有相同的

    pNode=pNode->pNext;
    }
    }
    T*Find(T&t)//查找含有特定值的結點
    {
    Node*pNode=pFirst;
    while(pNode!=NULL)
    {
    if(*(pNode->pT)==t)
    {
    returnpNode->pT;
    }
    pNode=pNode->pNext;
    }
    returnNULL;
    }
    voidPrintList()//列印輸出整個鏈表
    {
    if(pFirst==NULL)
    {
    cout<<"列表為空列表!"<<endl;
    return;
    }
    Node*pNode=pFirst;
    while(pNode!=NULL)
    {
    cout<<*(pNode->pT)<<endl;
    pNode=pNode->pNext;
    }
    }
    ~List()
    {
    Node*pNode=pFirst;
    while(pNode!=NULL)
    {
    Node*pNextNode=pNode->pNext;
    deletepNode;
    pNode=pNextNode;
    }
    }
    protected:
    structNode{
    Node*pNext;
    T*pT;

    Node()
    {
    pNext=NULL;
    pT=newT;
    }
    ~Node()
    {
    deletepT;
    }
    };
    Node*pFirst;//鏈首結點指針
    };

    classStudent
    {
    public:
    charid[20];//學號
    charname[20];//姓名
    intage;//年齡
    Student()
    {
    }
    ~Student()
    {
    }
    Student(constchar*pid,constchar*pname,int_age)
    {
    strcpy(id,pid);
    strcpy(name,pname);
    age=_age;
    }
    booloperator==(constStudent&stu)
    {
    returnstrcmp(id,stu.id)==0&&strcmp(id,stu.id)==0&&age==stu.age;
    }
    Student&operator=(constStudent&stu)
    {
    strcpy(id,stu.id);
    strcpy(name,stu.name);
    age=stu.age;
    }
    friendostream&operator<<(ostream&out,constStudent&stu);
    };
    ostream&operator<<(ostream&out,constStudent&stu)
    {
    out<<"id:"<<stu.id<<" name:"<<stu.name<<" age:"<<stu.age<<endl;
    }

    intmain()
    {
    List<Student>stuList;
    cout<<"添加學生前:"<<endl;
    stuList.PrintList();

    Studentstu1("1","張三",18);
    Studentstu2("2","李四",18);
    Studentstu3("3","王五",18);
    Studentstu4("4","至尊寶",18);
    Studentstu5("5","豬八戒",18);
    Studentstu6("6","唐僧",18);
    Studentstu7("7","沙和尚",18);
    Studentstu8("8","觀音",18);
    stuList.Add(stu1);
    stuList.Add(stu2);
    stuList.Add(stu3);
    stuList.Add(stu4);
    stuList.Add(stu5);
    stuList.Add(stu6);
    stuList.Add(stu7);
    stuList.Add(stu8);
    cout<<"添加學生後:"<<endl;
    stuList.PrintList();


    Studentstu11("1","張三",18);
    Student*pStu=stuList.Find(stu11);
    cout<<"查找到的同學是:"<<*pStu;

    stuList.Remove(stu11);
    cout<<" 刪除第一個後:"<<endl;
    stuList.PrintList();

    return0;
    }

㈤ 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<iostream>
usingnamespacestd;
structA
{
intx;
A*next;
};
A*Head;//頭指針
intk=0;//記錄創建鏈表個數
A*J_L();//創建鏈表
voidB_J(A*head,intx);//比較大小
voidshow(A*head);//輸出
voidmain()
{
A*t;
t=J_L();
B_J(t,k);
show(t);
}
voidB_J(A*head,intx)
{
A*m,*n;
intswap;
for(inti=0;i<(x-1);i++)
{
n=head;
m=n->next;
for(intj=0;j<(x-i-1);j++)
{
if((n->x)>(m->x))
{swap=n->x;n->x=m->x;m->x=swap;}
n=n->next;
m=n->next;
}
}
}
voidshow(A*head)
{
A*t=head;
while(t!=NULL)
{
cout<<t->x<<endl;
t=t->next;
}
}
A*J_L()
{
cout<<"請輸入,0退出";
A*p=newA;
k++;
A*d=Head=p;
cin>>p->x;
if(p->x==0)
{
k--;
deletep;Head=0;p=0;
}
while(1)
{
cout<<"請輸入,0退出";
p=newA;
k++;
d->next=p;
cin>>p->x;
if(p->x==0)
{k--;deletep;d->next=0;p=0;break;}
d=p;
}
returnHead;
}

㈦ c語言構建一個最簡單的單鏈表

typedef struct node { char name[20]; struct node *link; }stud; 下面就來看一個建立帶表頭(若未說明,以下所指 鏈表 均帶表頭)的單 鏈表 的完整程序。 #include <stdio.h> #include <malloc.h> /*包含動態內存分配函數的頭文件*/ #define N 10 /*N為人數*/ typedef struct node { char name[20]; struct node *link; }stud; stud * creat(int n) /*建立單 鏈表 的函數,形參n為人數*/ { stud *p,*h,*s; /* *h保存表頭結點的指針,*p指向當前結點的前一個結點,*s指向當前結點*/ int i; /*計數器*/ if((h=(stud *)malloc(sizeof(stud)))==NULL) /*分配空間並檢測*/ { printf("不能分配內存空間!"); exit(0); } h->name[0]='\0'; /*把表頭結點的數據域置空*/ h->link=NULL; /*把表頭結點的鏈域置空*/ p=h; /*p指向表頭結點*/ for(i=0;i<n;i++) { if((s= (stud *) malloc(sizeof(stud)))==NULL) /*分配新存儲空間並檢測*/ { printf("不能分配內存空間!"); exit(0); } p->link=s; /*把s的地址賦給p所指向的結點的鏈域,這樣就把p和s所指向的結點連接起來了*/ printf("請輸入第%d個人的姓名",i+1); scanf("%s",s->name); /*在當前結點s的數據域中存儲姓名*/ s->link=NULL; p=s; } return(h); } main() { int number; /*保存人數的變數*/ stud *head; /*head是保存單 鏈表 的表頭結點地址的指針*/ number=N; head=creat(number); /*把所新建的單 鏈表 表頭地址賦給head*/ } 這樣就寫好了一個可以建立包含N個人姓名的單 鏈表 了。寫動態內存分配的程序應注意,請盡量對分配是否成功進行檢測。

㈧ 幫我編寫一個用C語言編寫的單鏈表的建立,和輸入輸出操作,謝謝各位

#include <stdio.h>
#include <windows.h>

typedef struct node
{
int num;
struct node *next;
}lnode;

lnode *creat()
{
lnode *head,*p,*q;
int n;

head=NULL;

printf("輸入要創建的節點數\n");
scanf("%d",&n);
while(n)
{
p=(lnode *)malloc(sizeof(lnode));
printf("輸入數據\n");
scanf("%d",&p->num);
if (head==NULL)
{
head=q=p;
}
else
{
q->next=p;
q=p;
}
n--;
}
q->next=NULL;
return head;
}

lnode *insert(lnode *head)
{
lnode *p,*q,*s;
int n;
char ch;

q=p=head;

printf("輸入插入的位置\n");
scanf("%d",&n);
printf("請選擇是插入在前還是在後(F or B)\n");
getchar();
ch=getchar();
if(ch=='F'||ch=='f')
{
s=(lnode *)malloc(sizeof(lnode));
printf("請輸入數據\n");
scanf("%d",&s->num);
while(p&&--n)
{
q=p;
p=p->next;
}
if (q==p)
{
s->next=q;
return s;
}
else
{
q->next=s;
s->next=p;
return head;
}
}
else if (ch=='B'||ch=='b')
{
s=(lnode *)malloc(sizeof(lnode));
printf("請輸入數據\n");
scanf("%d",&s->num);
while(p&&n--)
{
q=p;
p=p->next;
}
if (NULL==q->next)
{
q->next=s;
s->next=NULL;
return head;
}
else
{
q->next=s;
s->next=p;
return head;
}
}
else
{
printf("輸入錯誤\n");
}

}
lnode *del(lnode *head)
{
lnode *p,*q;
int n;
int flag=0;

p=q=head;
printf("請輸入刪除的數據\n");
scanf("%d",&n);
while(p)
{

if (p->num==n)
{
flag=1;
if (head==p)
{
head=head->next;

}
else if(NULL==p->next)
{
q->next=NULL;

}
else
{
q->next=p->next;

}
}
q=p;
p=p->next;
}
if (flag==0)
{
printf("沒有找到數據\n");
system("pause");
}
else
{
printf("刪除成功\n");
system("pause");
}
return head;
}

lnode *sort(lnode *head)
{
lnode *t,*f,*min,*p_min,*s;
char ch;

f=NULL;

printf("請輸入排序方式:升序(A/a),降序(D/d)\n");
getchar();
ch=getchar();
if (ch=='A'||ch=='a')
{
while(NULL!=head)
{
for (min=head,s=head;s->next!=NULL;s=s->next)
{
if (min->num>s->next->num)
{
p_min=s;
min=s->next;

}
}
if (NULL==f)
{
f=min;
t=min;
}
else
{
t->next=min;
t=min;
}
if (min==head)
{
head=head->next;
}
else
{
p_min->next=min->next;
}
}
if (f!=NULL)
{
t->next=NULL;
}
printf("排序完成\n");
system("pause");
head=f;
return f;
}
else if (ch=='D'||ch=='d')
{
while(NULL!=head)
{
for (min=head,s=head;s->next!=NULL;s=s->next)
{
if (min->num<s->next->num)
{
p_min=s;
min=s->next;

}
}
if (NULL==f)
{
f=min;
t=min;
}
else
{
t->next=min;
t=min;
}
if (min==head)
{
head=head->next;
}
else
{
p_min->next=min->next;
}
}
if (f!=NULL)
{
t->next=NULL;

}
printf("排序完成\n");
system("pause");
head=f;
return f;

}
}

void dispaly(lnode *head)
{
lnode *p;

p=head;

printf("\n");
while(p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
}

int getoption()
{
int n;

printf("0 退出\n");
printf("1 創建鏈表\n");
printf("2 插入節點\n");
printf("3 刪除節點\n");
printf("4 排序節點\n");
printf("5 顯示鏈表\n");
printf("請選擇操作\t");
scanf("%d",&n);
return n;
}

int main()
{
lnode *temp;
char ch;
int o;

do
{
system("cls");
o=getoption();
switch (o)
{
case 0:
exit(0);
break;
case 1 :
system("cls");
temp=creat();
break;
case 2:
system("cls");
temp=insert(temp);
break;
case 3:
system("cls");
temp=del(temp);
break;
case 4:
system("cls");
temp=sort(temp);
break;
case 5:
system("cls");
dispaly(temp);
system("pause");
break;

}
system("cls");
printf("按0退出,任意鍵繼續\t");
ch=getchar();
if (ch=='0')
{
exit(0);
}
} while (ch!='0');
}